2012-02-18 80 views
2

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

  • 应用1号嵌件消息SQS
  • 一个.NET工作者角色轮询队列,如果发现将其发送到App#2的方法,等待应用程序#2到结束,重新开始轮询的队列
  • 应用#2的过程,是一项长期而繁重的任务消息

为app#2可能需要相当长的时间处理这些消息,我无法预测有多少邮件同时发送从应用程序#1,队列系统保证我的应用程序#2没有耗尽资源,系统可以很容易地扩展。但是我想解决一个问题:我不想让一台机器运行worker角色(现在在Azure上)来轮询一个队列(所有东西都托管在别处,而worker角色不是一个选项)。此外,由于民意测验之间的停顿,民意测验不会像推动那样敏感。

从轮询切换到推动听起来是正确的道路,但我需要我保证即使1k消息从应用程序#1在一秒内发送,应用程序#2处理它们一个接一个,并没有命中1k次/秒。

我正在计划一个应用#1发布到SNS主题的设计,其订户是SQS和App#2。应用程序2检查SQS队列,如果它是空的,则退出,如果不是逐个处理消息,则退出。但是,我该如何编写App#2(现在是.Net网络/ Web服务),以便如果它已经在处理消息并从SNS接收到通知,它什么也不做,并退出(如果不是多次处理将会运行)。

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

回答

2

如果您认为SNS角色是缩短轮询“睡眠间隔”的一种方法,那么您根本不会更改任何查询功能,应用程序2仍然会按照您的意愿处理邮件,但如果它“睡觉“的通知将唤醒它并立即开始投票。

0

您可以通过使用传递策略来了解所有这些情况,这些允许您为端点指定速率限制和重试规则。