7

设想:

如果我使用多个线程剥离了多个 Worker 角色或 ONE Worker 角色,它会轮询 Azure 队列中的新消息。

有人可以确认这是否是正确的设计方法吗?我想拥有许多工作者角色的原因是为了加快 PROCESSJOB。我们的应用程序应该是接近实时的,即一旦我们应该得到消息,应用复杂的业务规则并提交到 AZURE DB。我们预计每 3 分钟有 11,000 条消息。

谢谢你。

4

1 回答 1

17

您可以拥有任意数量的队列阅读器。扩展工作角色实例非常常见,因为它们都可以从同一个队列中读取,从而为您提供更大的工作吞吐量。

当您阅读队列消息时,会在一段时间内将其标记为“不可见”,以防止其他人阅读和执行相同的工作。消息的拥有者必须在该时间段到期前将其删除,否则该消息将再次可见,并且在原阅读者尝试删除该消息时会抛出异常。这意味着您的操作必须是幂等的。

没有直接的毒消息处理,但它很容易实现,因为每条消息都有一个出列计数。只需检查它并在阅读 3-4 次后删除有毒信息。您还可以根据出队计数动态调整超时时间,因为可能由于时间窗口太短而导致处理失败。

这是. _DequeueCount

编辑:就在 3 分钟内处理 11,000 条消息而言:队列的可扩展性目标是500 2,000 TPS,或 3 分钟内多达 360,000 个事务(远远超出您的 11,000 条消息要求)。您可以通过将消息组合到单个队列消息中以及一次读取多条消息来进一步加快处理速度,这也将减少您的事务计数。您还可以查看队列的ApproximateMessageCount属性以查看您的队列是否正在备份(然后扩展到其他实例以帮助使用队列项)。

于 2011-08-28T14:09:34.650 回答