亚马逊SQS如何通知我的“工作”服务器队列中有内容?

14 投票
5 回答
12879 浏览
提问于 2025-04-16 07:02

我正在跟着这个教程:http://boto.s3.amazonaws.com/sqs_tut.html

当队列里有东西时,我该怎么把我的20个工作者中的一个分配去处理它呢?

我在用Python。

5 个回答

7

进一步说明一下SQS的问题 - 你必须定期去检查是否有新通知,而且没有保证在你每次检查时都能收到队列中的事件(这是因为他们的架构设计有冗余)。这意味着你需要考虑到,有可能你检查的时候没有返回任何消息(对我来说,这意味着我需要提高检查的频率)。

总的来说,我发现SQS有太多限制(我在一些其他AWS工具,比如SimpleDB中也发现了类似的问题)。不过这只是我个人的看法。

9

现在可以通过长轮询来实现对SQS队列的访问。

点击这里查看详细信息

长轮询支持的时间范围是1到20秒,也就是说,当你调用接收消息的操作时,它会等待最多20秒,看看队列里有没有消息。如果在这段时间内没有消息,它就会返回一个空的响应,而不是立刻告诉你没有消息。

如果你在请求中没有指定等待时间,系统会使用队列的一个设置来决定等待多久。

类型:0到20的整数(秒)

默认值:队列的接收消息等待时间设置。

14

很遗憾,SQS(简单队列服务)缺少一些我们通常在队列中期待的功能。比如,它没有通知功能,也没有可以阻塞的“获取”调用。

亚马逊的SNS(简单通知服务)可能对你有帮助。当你在队列中添加了工作后,可以向订阅的工作者发送通知。

你可以查看以下链接了解更多:

http://aws.amazon.com/sns/

使用亚马逊SQS的最佳实践 - 轮询队列

撰写回答