首页 > 解决方案 > 如何知道队列是否已在 Azure 服务总线中使用 PEEK 方法完全读取

问题描述

我正在使用 Azure 服务总线 REST API 来接收消息。要求是有一个计划的作业来读取来自 Azure 服务总线队列的消息并将它们转发以进行处理。如果处理成功,则将它们从队列中删除或保留在队列中以在下一个计划作业中处理。我正在使用 Peek-Lock 消息(非破坏性读取)方法(https://docs.microsoft.com/en-us/rest/api/servicebus/peek-lock-message-non-破坏性读取)。

我面临的问题是在我的循环中,如何知道我已经完全读取了队列,这样我就不会再次重新读取同一个队列。

标签: azureazureservicebusazure-servicebus-queues

解决方案


你的要求有点问题。

如果处理成功,则将它们从队列中删除或保留在队列中以在下一个计划作业中处理。

成功的处理应该总是导致消息完成。否则,你就是在自找麻烦。在 peek-lock 模式下处理消息时,消息最多被锁定 5 分钟。如果处理成功,您有责任完成它。如果未完成,则表明处理不成功,根据您的要求再次阅读。不要将成功处理的消息留在队列中。

我面临的问题是在我的循环中,如何知道我已经完全读取了队列,这样我就不会再次重新读取同一个队列。

你不应该担心这个。阅读消息并处理。如果处理失败,该消息将重新出现。否则,应删除一条消息。如果您想处理幂等性,即确保如果由于某种原因消息未多次处理,则在成功处理后并在完成之前将消息 ID(假设它是唯一的)存储在数据存储中并针对该消息验证任何新消息数据存储。


推荐阅读