使用Azure队列作为状态机

时间:2013-05-27 17:00:52

标签: azure state-machine azure-queues

我想将Azure Queues用作高负载/高规模Web服务的状态机。

客户端会向Web服务端点提交请求,此时我将返回请求ID。

然后我将消息提交到队列,以便工作者角色可以处理它,但在提交过程中不会发生数据库活动。相反,我想使用消息所在的队列来表示它的当前状态。

我的问题是,如果一个辅助角色从队列中抓取消息来处理它,它就会在该队列上变得不可见。如果我想检查该消息的处理状态,我的消息状态不明确。消息丢失/从未收到,或者它在队列中但是因为正在处理而不可见。

理想情况下,我希望能够在隐形信息中达到顶峰。如果我找到一个与请求ID匹配的,我知道它正在被处理,如果它是不可见的,或者它正在等待处理,如果它是可见的。显然,我知道它何时完成处理,因为该操作将导致数据库写入。

这是可能的,或者是我无法查看Azure队列中的不可见消息,这使得它不是吗?

2 个答案:

答案 0 :(得分:5)

Windows Azure存储队列用于传递消息。它们不会帮助您进行状态机处理,特别是因为每条消息至少可以处理 (因为应用程序在处理消息时会遇到意外的异常情况,即vm实例可能会崩溃等等,然后队列消息在超时后重新出现(现在可能与其他消息无关。

最好使用Azure Table行(或SQL表行)。

答案 1 :(得分:0)

在这种情况下,我建议使用blob来存储消息的状态。每当工作人员收到消息时,都可以包含blobID,并且工作人员可以更新状态blob。您的带外流程/网站/任何可以查询blob以收集状态信息。