boto3批量接收后批量删除SQS消息

Rue*_*hri 4 amazon-sqs boto3

我正在使用 boto3 批量接收消息()。这将返回boto3 文档中指定的字典项。

收到这批消息后,我一一处理,想全部处理完后批量删除。我不想在处理完每个项目后一一删除它们。

delete_message_batch() 函数的语法与来自 receive_message() 函数的响应略有不同,因此我需要将来自 receive_message() 的响应 dict 重新格式化为合适的格式(仅使用 Id 和 ReceiptHandle)。

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

Adr*_*lom 8

这是我处理消息的方式。我创建了一个包含 id 和收据句柄的列表。id 不是强制性的,您可以插入 range(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)
Run Code Online (Sandbox Code Playgroud)

  • 将 `delete_message` 更改为 `delete_message_batch` 已使我的消息处理速度提高了 5 倍以上。这会更高,除非`delete_message_batch`每次调用限制为10条消息。 (2认同)