当队列中有什么东西时,亚马逊的SQS如何通知我的"工作"服务器?

TIM*_*MEX 14 python queue callback amazon-sqs amazon-web-services

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

当队列中有什么东西时,如何指定我的20名工作人员之一来处理它?

我正在使用Python.

Nic*_*ght 12

不幸的是,SQS缺乏我们在队列中经常出现的一些语义.没有通知或任何阻止"获取"呼叫.

亚马逊相关的SNS /简单通知服务可能对您有所帮助.将工作添加到队列后,您可以向订阅的工作人员发送通知.

也可以看看:

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

使用Amazon SQS的最佳做法 - 轮询队列

  • SQS现已开始提供长期投票.所以它减少了你对SQS的调用 (3认同)

小智 9

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

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

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

如果未在请求中指定WaitTimeSeconds,则使用队列属性ReceiveMessageWaitTimeSeconds来确定等待的时间.

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

默认值:队列的ReceiveMessageWaitTimeSeconds.


小智 7

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

在队列中创建云观察警报,例如可见消息或收到的消息> 0.作为操作,您将向sns主题发送消息,然后可以通过http/s端点将消息发送给您的工作人员.

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


Dav*_*rks 6

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

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

  • 但这对SQS来说并不是一个问题 - 这是一个应用程序问题.如果它长时间运行,您应该在此过程中延长可见性超时. (2认同)