我在AWS SQS
的队列中收到多条消息/行时遇到一些问题。
这是我的代码:
import boto3
import boto
AWS_ACCESS_KEY = 'AKIAJ65AZZZZRIQSQWA'
AWS_SECRET_ACCESS_KEY = 'xd+2ZfwIRj2yUuoLQNunMaFDdEJlzNzv'
sqs = boto3.resource('sqs', aws_access_key_id=AWS_ACCESS_KEY,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
region_name='us-east-2'
)
queue_name = 'Messages.fifo'
queue = sqs.get_queue_by_name(QueueName=queue_name)
messages = queue.receive_messages()
for message in messages:
print('Body: {0}'.format(message.body))
任何帮助将非常感谢为什么。 谢谢!
答案 0 :(得分:3)
receive_messages()
函数采用MaxNumberOfMessages
参数,默认为1条消息。因此,您需要索取更多信息。
然而,receive_messages()
documentation州:
MaxNumberOfMessages (整数) - 要返回的最大邮件数。 Amazon SQS永远不会返回比此值更多的消息(但是,可能会返回更少的消息)。有效值为1到10.默认值为1.
因此,您可能无法在每次通话时收到全部信息。
答案 1 :(得分:0)
下面是一些代码(来自GitHub的一个较大示例),显示了如何接收多条消息:
import logging
import boto3
from botocore.exceptions import ClientError
logger = logging.getLogger(__name__)
sqs = boto3.resource('sqs')
def receive_messages(queue, max_number, wait_time):
"""
Receive a batch of messages in a single request from an SQS queue.
:param queue: The queue from which to receive messages.
:param max_number: The maximum number of messages to receive. The actual number
of messages received may be less.
:param wait_time: The maximum time to wait (in seconds) before returning. When
this number is greater than zero, long polling is used. This
can result in reduced costs and fewer false empty responses.
:return: The list of Message objects received. These each contain the body
of the message and metadata and custom attributes.
"""
try:
messages = queue.receive_messages(
MessageAttributeNames=['All'],
MaxNumberOfMessages=max_number,
WaitTimeSeconds=wait_time
)
for msg in messages:
logger.info("Received message: %s: %s", msg.message_id, msg.body)
except ClientError as error:
logger.exception("Couldn't receive messages from queue: %s", queue)
raise error
else:
return messages