现在:
由于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,但我不知道如何避免处理应用程序同时处理多条消息。
答案 0 :(得分:2)
如果您认为SNS角色是缩短轮询“睡眠间隔”的一种方法,那么您根本不会更改任何查询功能,应用程序#2仍将处理消息,但如果它“睡觉” “通知会唤醒它并立即发起民意调查。
答案 1 :(得分:0)
您可以使用投放政策来解决所有这些问题,这些政策允许您为终端指定费率限制和重试规则。