如何知道队列是否已使用Azure Service Bus中的PEEK方法完全读取

时间:2019-06-25 14:48:33

标签: azure azureservicebus azure-servicebus-queues

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

我面临的问题是我的循环内部,如何知道我已经完全读取了队列,以便不再再次读取同一队列。

1 个答案:

答案 0 :(得分:0)

您的要求有些问题。

  

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

成功的处理应始终导致消息完成。否则,您会遇到麻烦。在窥视锁定模式下处理邮件时,该邮件最多锁定5分钟。如果处理成功,则是您的责任。如果未完成,则表明该处理未成功,并且应根据您的要求再次读取。不要将成功处理的消息留在队列中。

  

我面临的问题是我的循环内部,如何知道我已经完全读取了队列,以便不再再次读取同一队列。

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