2017-02-10 47 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)