使用Azure队列作为状态机

RMD*_*RMD 0 state-machine azure azure-queues

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

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

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

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

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

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

Dav*_*gon 5

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

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