在AWS SQS队列中连续读取数据

3 投票
2 回答
1956 浏览
提问于 2025-04-17 15:15

我刚接触AWS SQS队列,现在正在尝试使用boto这个工具。我发现当我在一个循环里读取一个装满消息的队列时,读取到10到25条消息后,队列就不再返回任何消息了(尽管队列里还有1000多条消息)。过了几秒钟,或者在停止并重新启动程序后,队列才会开始返回另外一组10到25条消息。

我想知道这种情况是怎么回事,或者能不能给我一些建议。再强调一下,我对SQS才刚刚接触几天!

谢谢!

2 个回答

2

长轮询更高效,因为它可以让你在等待更多结果的时候保持HTTP连接一直打开。不过,你也可以在boto中自己进行轮询,只需要设置一个循环,并在读取队列之间等待一段时间。使用这种轮询策略,你仍然可以获得不错的整体处理能力。

2

SQS队列默认是这样工作的(短轮询)。如果你在设置队列后没有更改任何设置,默认情况下它会从一组机器中随机抽取消息。如果你使用了多台机器,并且想要在那个时刻获取所有可以处理的消息(跨越所有机器),你需要使用长轮询。可以查看亚马逊的文档了解更多。 我觉得目前boto不直接支持这个功能。

撰写回答