我是AWS SQS队列的新手,我目前正在玩boto。我注意到当我尝试在while循环中读取一个充满消息的队列时,我看到在读取10-25个消息后,队列不会返回任何消息(即使队列有超过1000条消息)。它会在几秒钟后或者在停止并重新启动程序时开始填充另一组10-25条消息。 虽然如此: read_queue()//已与所需队列建立连接。
对此行为的任何想法或指向正确的方向。重申我对SQS只有几天的时间!
由于
答案 0 :(得分:2)
这是SQS队列默认工作的方式(短轮询)。如果在设置队列后未更改任何设置,则默认设置是从计算机的加权随机抽样中获取消息。如果您正在使用多台计算机并且想要当时可以使用的所有消息(在所有计算机上),则需要使用长轮询。 See the Amazon documentation here.我不认为boto直接支持ATM。
答案 1 :(得分:2)
长轮询更有效,因为它允许您在等待更多结果时让HTTP连接保持打开一段时间。但是,您仍然可以通过设置循环并在读取队列之间等待一段时间来在boto中进行自己的轮询。使用此轮询策略,您仍然可以获得良好的整体吞吐量。