我正在使用Microsoft Azure ServiceBus for Queue消息使用WCF进行订阅。我正在尝试实现重试逻辑。我使用Peak / Lock来查看消息,然后必须对消息进行一些本地处理。如果该处理失败,我解锁消息,以便我可以尝试再次处理它。问题是我需要在处理尝试之间建立一个延迟。目前,它会弹回队列,然后几乎立即处理。尝试之间需要大约2分钟。
答案 0 :(得分:1)
如果在重新处理该特定队列的消息之前总是需要等待2分钟,您可以尝试将队列上的锁定超时配置为2分钟(加上您希望它处理的时间)消息)然后只是让锁过期,而不是解锁它。这有一个缺点,你需要密切关注你的处理时间,并在需要时延长锁定的超时时间。
另一种选择可能是接收和完成消息,设置将来2分钟的预定发送,然后重新发送消息。这有一个缺点,你需要消耗它并确认它,这涉及某些风险(例如你的进程在你有机会重新发送消息之前就已经死了)。
答案 1 :(得分:0)
“如果消息是从队列中以Peek Lock模式窥视,那么您在消息中没有接收上下文。您可以在Peek Lock模式下接收消息,该模式将在指定的时间间隔内锁定消息。队列的'锁定持续时间'属性。锁定消息到期之前无法接收锁定消息。因此,通过将锁定持续时间设置为2分钟并在Peek Lock模式下接收消息将解决此问题。
您可以编写自定义代码来更新“锁定持续时间”属性。 Service Bus Explorer,Serverless360等工具提供了使用图形用户界面更新属性的选项。“