python - AWS SQS ReceiveMessage 接收的消息少于/少于请求的消息?
问题描述
我配置了一个简单的 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 响应中收到任何消息。如果发生这种情况,请重复请求。
推荐阅读
- android - 什么工具可以更好地创建带有数据库、按钮、表单的移动应用程序
- ruby - Ruby:在 Sinatra 中显示 SNMP 输出
- rust - 发送到数组中的每个 futures::sync::mpsc::Sender
- python - 想要在 python 中执行分组,分组数据将进入行
- java - Maven - 我是否应该包含我导入的库包含的依赖项
- machine-learning - 如何使用机器学习算法设置多类?
- r - 指定固定效应两级变量 rma.mv
- unity3d - 如何在 Unity 5 中为结果设置动画?
- javascript - 默认情况下如何在 TinyMCE 中选择“对齐文本”切换按钮?
- flutter - FullscreenDialog 屏幕不覆盖底部导航栏