我使用Azure服务总线REST接收消息。要求有一个计划好的作业从Azure Service总线队列中读取消息并转发它们以进行处理。如果处理成功,则从队列中删除它们,或将它们保留在要在下一个计划作业中处理的队列中。我正在使用Peek消息(无损读取)方法(https://learn.microsoft.com/en-us/rest/api/servicebus/peek-lock-message-non-destructive-read).
我所面临的问题是在我的循环中,如何知道我已经完全读取了队列,这样我就不会再重读同一个队列了。
发布于 2019-06-25 18:30:41
您的要求有些问题。
如果处理成功,则从队列中删除它们,或将它们保留在要在下一个计划作业中处理的队列中。
成功的处理应该总是导致消息的完成。否则你就自找麻烦了。当以peek模式处理消息时,该消息被锁定最多5分钟.如果处理成功,您有责任完成它。如果它没有完成,这是处理不成功的一个标志,根据您的要求,应该重新读取它。不要将已成功处理的消息留在队列中。
我所面临的问题是在我的循环中,如何知道我已经完全读取了队列,这样我就不会再重读同一个队列了。
你不应该担心这个。读取消息和处理。如果处理失败,消息将重新出现。否则,应该删除消息。如果您想处理幂等性,即确保如果由于某种原因消息不会被处理不止一次,则在成功处理时和完成之前在数据存储区中存储消息ID (假设它是唯一的),并根据该数据存储验证任何新消息。
https://stackoverflow.com/questions/56756731
复制相似问题