14

我正在关注本教程:http ://boto.s3.amazonaws.com/sqs_tut.html

当队列中有东西时,我如何分配我的 20 个工人中的一个来处理它?

我正在使用 Python。

4

5 回答 5

13

不幸的是,SQS 缺少我们在队列中经常期望的一些语义。没有通知或任何形式的阻止“获取”呼叫。

Amazon 的相关 SNS/Simple Notification Service 可能对您有所帮助。将工作添加到队列后,您可以向订阅的工作人员发送通知。

也可以看看:

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

使用 Amazon SQS 的最佳实践 - 轮询队列

于 2010-11-14T04:59:21.533 回答
9

这(现在)可以通过 SQS 队列上的长轮询来实现。

http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/Query_QueryReceiveMessage.html

长轮询支持(从 1 到 20 的整数)- ReceiveMessage 操作调用将等待消息进入队列以包含在响应中的持续时间(以秒为单位),而不是在消息尚未出现时返回空响应可用的。

如果在请求中没有指定WaitTimeSeconds,则使用队列属性ReceiveMessageWaitTimeSeconds 来确定等待多长时间。

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

默认值:队列的 ReceiveMessageWaitTimeSeconds。

于 2013-03-05T05:01:41.500 回答
7

进一步指出 SQS 的一个问题 - 您必须轮询新通知,并且不能保证在任何特定轮询中您将收到队列中存在的事件(这是由于其架构的冗余)。这意味着您需要考虑您的投票没有返回存在的消息的可能性(这对我来说意味着我需要提高投票率)。

总而言之,我发现 SQS 存在太多限制(正如我在其他一些 AWS 工具中发现的,例如 SimpleDB)。但这只是我注入的意见。

于 2010-11-14T05:04:12.613 回答
7

实际如果你不需要低延迟,你可以试试这个:

在您的队列上创建一个 cloudwatch 警报,例如可见的消息或收到的消息 > 0。作为一个操作,您将向一个 sns 主题发送一条消息,然后该主题可以通过一个 http/s 端点将消息发送给您的工作人员。

通常这种方法用于自动缩放。

于 2013-09-19T20:50:06.250 回答
2

现在有一个来自 Amazon 的 SQS 的 JMS 包装器,可以让您创建在新消息可用时自动触发的侦听器。

http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/jmsclient.html#jmsclient-gsg

于 2016-05-27T22:03:27.820 回答