- 应用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,但我不知道如何避免处理应用程序同时处理多个消息。