0

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

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

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

我的问题是,如果一个工作角色从队列中抓取消息来处理它,它在该队列中变得不可见。如果我想检查该消息的处理状态,我有一个模棱两可的消息状态。消息要么丢失/从未收到,要么它在队列中但不可见,因为它正在处理中。

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

那么这是否可能,或者我无法查看 Azure 队列中的不可见消息这一事实是否会导致这种情况?

4

2 回答 2

5

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

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

于 2013-05-27T20:22:21.943 回答
0

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

于 2017-12-15T22:57:12.340 回答