AWSSQSReceiveMessage收到的消息比请求的少/少?
我配置了一个简单的 SQS,我想一次处理4 条消息。在我的测试中,它有2 个“可用”消息。当我收到消息时,它一次只产生1 个结果。我究竟做错了什么?
sqs = boto3.client('sqs')
response = sqs.receive_message(
QueueUrl=queue_url,
MaxNumberOfMessages=4
)
回答
你没有做错任何事,行为是预期的。
这是由于 SQS(以及大多数 AWS 服务)的分布式特性。基本上并非所有节点都具有所有可用消息,并且您与之交谈的节点可能会返回 0 和 MaxNumberOfMessages 之间的任何数字(如果有)。要在一次呼叫中实际接收多条消息,您需要在队列中拥有 100 或 1000 多条消息,即使如此,您也可能不走运,收到的消息很少。
从文档:
如果队列中的消息数量很少(少于 1,000),您收到的消息很可能少于每次 ReceiveMessage 调用请求的数量。如果队列中的消息数量极少,您可能不会在特定的 ReceiveMessage 响应中收到任何消息。如果发生这种情况,请重复请求。