3

我对 AWS SQS 队列非常陌生,目前正在玩 boto。我注意到,当我尝试在 while 循环中读取充满消息的队列时,我看到在读取 10-25 条消息后,队列没有返回任何消息(即使队列有超过 1000 条以上的消息)。几秒钟后或在停止和重新启动程序时,它开始填充另一组 10-25 条消息。while true: read_queue() // 已与所需队列建立连接。

对这种行为的任何想法或指出我正确的方向。只是重申我才几天才到 SQS !

谢谢

4

2 回答 2

2

这就是 SQS 队列默认的工作方式(短轮询)。如果您在设置队列后没有更改任何设置,则默认是从加权随机抽样机器中获取消息。如果您使用多台机器并且想要当时可以使用的所有消息(跨所有机器),则需要使用长轮询。请参阅此处的亚马逊文档。我不认为boto直接支持ATM。

于 2013-02-08T16:58:30.627 回答
2

长轮询更有效,因为它允许您在等待更多结果的同时让 HTTP 连接保持打开一段时间。但是,您仍然可以通过设置循环并在读取队列之间等待一段时间来在 boto 中进行自己的轮询。使用这种轮询策略,您仍然可以获得良好的整体吞吐量。

于 2013-02-08T17:35:19.553 回答