首页 > 解决方案 > AWS SQS ReceiveMessage 接收的消息少于/少于请求的消息?

问题描述

我配置了一个简单的 SQS,我想一次处理4条消息。在我的测试中,它有2条“可用”消息。当我收到消息时,它一次只产生1个。我究竟做错了什么?

队列通用配置

sqs列表

sqs = boto3.client('sqs')
response = sqs.receive_message(
    QueueUrl=queue_url,
    MaxNumberOfMessages=4
)

标签: pythonamazon-web-servicesboto3amazon-sqs

解决方案


您没有做错任何事情,这是预期的行为。

这是由于 SQS(和大多数 AWS 服务)的分布式特性。基本上不是所有的节点都有所有可用的消息,如果有可用的话,你与之交谈的节点可能会返回 0 到 MaxNumberOfMessages 之间的任何数字。要在一个呼叫中实际接收多条消息,您需要在队列中有 100 条或 1000 条以上的消息,即使这样,您也可能会很不幸并且收到的消息很少。

文档

如果队列中的消息数量很少(少于 1,000 条),您收到的消息很可能比每次 ReceiveMessage 调用请求的消息少。如果队列中的消息数量非常少,您可能不会在特定的 ReceiveMessage 响应中收到任何消息。如果发生这种情况,请重复请求。


推荐阅读