使用回执句柄,SQS 不会删除消息,提示说句柄已过期

0

【以下的问题经过翻译处理】 我正在使用boto3的Python代码。 大多数情况下,SQS在删除消息时会出现错误消息,指出ReceiptHandle无效。原因:收据句柄已过期(The receipt handle has expired ) 我的队列是FIFO类型。我必须在读取后立即删除消息,以便客户端不会再处理相同的消息。我希望能够确保删除始终成功。我尝试了此网址中的示例代码。 https://boto3.amazonaws.com/v1/documentation/api/latest/guide/sqs-example-sending-receiving-msgs.html 我得到了相同的错误消息

profile picture
专家
已提问 6 个月前14 查看次数
1 回答
0

【以下的回答经过翻译处理】 这种行为最有可能的原因是您的可见性超时时间太短了。 可见性超时时间控制消息被一个消费者检索后多长时间才能对其他消费者可见。 换句话说,它控制您在消息被传递给其他消费者之前进行处理和删除的时间。 您可以在此处找到有关可见性超时的更多信息。

读取消息后,您不应立即将其从队列中删除,而是应在处理完之后再进行删除。 如果您立即删除它,而消费者在无法处理消息之前失败,那么您将失去该消息。 因此,您应设置一个比处理消息所需的时间更长的可见性超时时间。 如果处理消息需要很长时间并且您不想在消费者故障的情况下等待整个时间,那么您应设置较短的超时时间,并让消费者在处理消息时将其延长。

profile picture
专家
已回答 6 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则