我有一个整数列表(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个较小的列表,但是下一步尚不清楚。
答案 0 :(得分:0)
根据documentation 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)
答案 1 :(得分:0)
建立在@liorko的答案和一些反复试验的基础上,这似乎行之有效,并且比我以前使用的1-by-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)