如何使用 Boto3 和 Python 将多个批处理消息从列表发送到 SQS 队列
How to send multiple batch messages from a list to an SQS queue using Boto3 and Python
我有一个整数列表 (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 允许使用 send_messages()
命令一次最多批处理 10 条消息,但我不确定如何为批量发送构建 Entries=
属性。我正在使用 chunks = [integerList[x:x+10] for x in range(0, len(integerList), 10)]
将 integerList 分解为更小的 10 列表,但接下来的步骤不清楚。
根据documentation Entries
是一个消息列表。
对于 Entries
中的每个条目,参数类型在 link 中有详细说明。
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)
基于@liorko 的回答和一些试验和错误,这似乎有效并且比我之前使用的 1 对 1 方法快得多。
import boto3
sqsResource = boto3.resource('sqs')
def write_sqs(integerList):
queue = sqsResource.get_queue_by_name(QueueName=NAMEOFQUEUEHERE)
maxBatchSize = 10 #current maximum allowed
chunks = [integerList[x:x+maxBatchSize] for x in range(0, len(integerList), maxBatchSize)]
for chunk in chunks:
entries = []
for x in chunk:
entry = {'Id': str(x),
'MessageBody': str(x),
'MessageGroupId': 'ANYTHINGYOUWANT'}
entries.append(entry)
response = queue.send_messages(Entries=entries)
我有一个整数列表 (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 允许使用 send_messages()
命令一次最多批处理 10 条消息,但我不确定如何为批量发送构建 Entries=
属性。我正在使用 chunks = [integerList[x:x+10] for x in range(0, len(integerList), 10)]
将 integerList 分解为更小的 10 列表,但接下来的步骤不清楚。
根据documentation Entries
是一个消息列表。
对于 Entries
中的每个条目,参数类型在 link 中有详细说明。
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)
基于@liorko 的回答和一些试验和错误,这似乎有效并且比我之前使用的 1 对 1 方法快得多。
import boto3
sqsResource = boto3.resource('sqs')
def write_sqs(integerList):
queue = sqsResource.get_queue_by_name(QueueName=NAMEOFQUEUEHERE)
maxBatchSize = 10 #current maximum allowed
chunks = [integerList[x:x+maxBatchSize] for x in range(0, len(integerList), maxBatchSize)]
for chunk in chunks:
entries = []
for x in chunk:
entry = {'Id': str(x),
'MessageBody': str(x),
'MessageGroupId': 'ANYTHINGYOUWANT'}
entries.append(entry)
response = queue.send_messages(Entries=entries)