如何使用 Azure 服务总线中的 PEEK 方法知道队列是否已被完全读取

How to know if the queue has already been read fully using PEEK method in Azure Service Bus

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

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

你的要求有点问题

If processed successfully, then delete them from the Queue or keep them in the Queue to be processed in the next scheduled job.

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

The problem i am facing is inside my loop, how to know that i have read the queue fully so that i do not re-read the same queue again.

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