2017-02-10 5 views
2

バッチでreceive_message()にboto3を使用しています。これは、boto3 documentationで指定されたdict項目を返します。boto3でバッチ受信後にバッチ削除SQSメッセージ

メッセージのバッチを受信した後、それらを1つずつ処理し、すべて処理した後にバッチ削除したいとします。 1つ1つのアイテムを処理した後、それらを1つずつ削除したくありません。

delete_message_batch()関数はreceive_message()関数の応答とは少し異なる構文なので、receive_message()からレスポンスdictを適切な形式に再フォーマットする必要があります(IdおよびReceiptHandleのみを使用)。

バッチ削除のためにreceive_message()からの応答を直接使用する簡単な方法はありますか?

答えて

1

メッセージの処理方法は次のとおりです。 idsと領収書ハンドルを持つリストを作成します。 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) 
関連する問題