当使用 AWS SQS FIFO 队列时,如果一个消息被消费者获取并且其可见时间到期,但消费者无法在可见时间内成功删除该消息,那么该消息的收据句柄就会过期。当再次尝试使用过期的句柄删除消息时,将会收到'收据句柄已过期”的错误。
为了解决这个问题,我们可以在消息被消费并且处理完毕后,立即将其标记为删除。这可以通过在消费消息的代码块中使用 DeleteMessage 方法完成。示例代码如下:
import boto3
sqs = boto3.resource('sqs')
queue = sqs.get_queue_by_name(QueueName='my_queue.fifo')
for message in queue.receive_messages(
MaxNumberOfMessages=10,
WaitTimeSeconds=5,
VisibilityTimeout=60
):
# Process message
print(message.body)
# Mark message for deletion
message.delete()
通过在消息处理过程中立即调用 DeleteMessage 方法来标记消息删除,即使收据句柄已过期,也不会导致消息无法被删除的问题。
上一篇:AWS-SQS-POST消息属性
下一篇:AWS-SSLroutines:OPENSSL_internal:WRONG_VERSION_NUMBER-ElasticLoadBalancing如何解决?