2017-02-10 6 views
2

Я использую boto3 для получения_message() партиями. Это возвращает элемент dict, как указано в boto3 documentation.Пакетное удаление сообщений SQS после приема партии в boto3

После получения пакета сообщений я обрабатываю их один за другим и хочу, чтобы пакет удалял их после их обработки. Я не хочу удалять их один за другим после обработки каждого отдельного элемента.

Функция delete_message_batch() имеет несколько иной синтаксис, чем ответ функции receive_message(), поэтому мне нужно переформатировать ответ dict from receive_message() в подходящий формат (только с использованием Id и ReceiptHandle).

Есть ли более простой способ прямого использования ответа от receive_message() для пакетного удаления?

ответ

1

Вот как я обрабатываю сообщения. Я создаю список с идентификаторами и марками получения. Иды не являются обязательными, вы можете вставить вывод диапазона (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) 
Смежные вопросы