首页 > 解决方案 > 如何使用 Boto3 和 Python 将多个批处理消息从列表发送到 SQS 队列

问题描述

我有一个整数列表(integerList),我想将其传递到 SQS 队列中,其中进入队列的每条消息都是列表中的整数。

我可以使用命令一次发送一条消息,send_message()代码如下。

import boto3

sqsResource = boto3.resource('sqs')

def write_sqs(integerList):
    queue = sqsResource.get_queue_by_name(QueueName=NAMEOFQUEUEHERE)
    for i in integerList:
        response = queue.send_message(MessageBody=str(i),
                                      MessageGroupId='TESTING')

但是,我想加快功能并分批发送消息。目前,AWS SQS 允许使用该命令一次最多批处理 10 条消息send_messages(),但我不确定如何构建Entries=批处理发送的属性。我正在使用 将 integerList 分解为 10 个较小的列表chunks = [integerList[x:x+10] for x in range(0, len(integerList), 10)],但接下来的步骤尚不清楚。

标签: pythonaws-lambdaboto3amazon-sqs

解决方案


根据文档 Entries是消息列表。
对于Entries参数类型中的每个条目,链接中都有详细说明。

import boto3

sqsResource = boto3.resource('sqs')

def write_sqs(integerList):
    queue = sqsResource.get_queue_by_name(QueueName=NAMEOFQUEUEHERE)
    entries = []

    for i in integerList:
        entry =  {
            'Id': 'id%s' % str(integerList[i]),
            'MessageBody': str(integerList[i])
            }
        entries.append(entry)

    response = queue.send_messages(entries)

推荐阅读