使用Amazon SQS和SNS设计推送队列,如何?

时间:2012-02-18 16:28:05

标签: .net queue amazon-sqs amazon-sns

现在:

  • App#1向SQS插入消息
  • .Net工作者角色轮询队列,如果发现消息将其发送到App#2进行处理,请等待App#2完成并重新开始轮询队列
  • App#2处理消息,这是一项漫长而繁重的任务

由于App#2可能需要很长时间来处理消息而我无法预测从App#1同时发送了多少消息,因此队列系统保证App#2不会耗尽资源并且系统可以很容易地扩展。但是我想解决一个问题:我宁愿不让机器运行辅助角色(现在在Azure上)只是为了轮询一个队列(一切都托管在其他工作者角色不是选项)。此外,由于民意调查之间的停顿,民意调查不会像推动那样敏感。

从民意转换为推送声音是正确的路径但是我需要保证即使1秒内从App#1发送1k消息,App#2也会逐个处理它们并且不会被击中1k次每秒。

我正计划将App#1发布到SNS主题的设计,其订阅者是SQS和App#2。 App#2检查SQS队列,如果它是空的,则退出,如果不是逐个处理消息,则退出。但是我如何编写App#2(现在是.Net web / web服务),这样如果它已经处理了一条消息并从SNS收到通知,它什么都不做并退出(如果没有多次处理就会运行)。 / p>

有任何建议如何设计吗?我读了this blog post,但我不知道如何避免处理应用程序同时处理多条消息。

2 个答案:

答案 0 :(得分:2)

如果您认为SNS角色是缩短轮询“睡眠间隔”的一种方法,那么您根本不会更改任何查询功能,应用程序#2仍将处理消息,但如果它“睡觉” “通知会唤醒它并立即发起民意调查。

答案 1 :(得分:0)

您可以使用投放政策来解决所有这些问题,这些政策允许您为终端指定费率限制和重试规则。