2017-02-10 1 views
2

일괄 처리로 receive_message()에 boto3을 사용하고 있습니다. 이렇게하면 boto3 documentation에 지정된대로 dict 항목이 반환됩니다.boto3에서 일괄 수신 후 일괄 삭제 SQS 메시지

메시지 묶음을받은 후 하나씩 처리하고 모두 처리 된 후에 일괄 처리를 삭제하려고합니다. 각 개별 항목을 처리 한 후에 하나씩 삭제하고 싶지 않습니다.

delete_message_batch() 함수는 receive_message() 함수의 응답과 약간 다른 구문을 사용하므로 receive_message()에서 응답 형식을 적절한 형식 (Id 및 ReceiptHandle 만 사용)으로 다시 형식화해야합니다.

일괄 삭제를 위해 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)