2017-02-10 49 views
2

我正在使用boto3批量接收消息()。这将返回boto3 documentation中指定的字典项。boto3批量接收后批量删除SQS消息

收到该批消息后,我逐一处理它们,并希望在它们全部处理后批量删除它们。我不想在处理每个单个项目后逐一删除它们。我们需要将receive_message()的响应字典格式化为合适的格式(仅使用Id和ReceiptHandle)。delete_message_batch()函数与receive_message()函数的响应语法略有不同,因此我需要将receive_message()的响应字典格式化为合适的格式。

有没有更简单的方法来直接使用receive_message()的响应来批量删除?

回答

1

下面是我如何处理消息。我用ID和收据手柄创建一个列表。该ID不是强制性的,您可以插入范围(10)的输出。此外,没有错误检查,所以你需要照顾。

response = SQS.receive_message(QueueUrl=queue_url, 
           AttributeNames=[], 
           MaxNumberOfMessages=10, 
           MessageAttributeNames=['All']) 
delete_batch = [] 
for message in response.get('Messages') or []: 
    # do stuff with each message 
    delete_batch.append({'Id': message['MessageId'], 
         'ReceiptHandle': message['ReceiptHandle']}) 
if delete_batch: 
    SQS.delete_message_batch(QueueUrl=queue_url, Entries=delete_batch)