【发布时间】:2013-06-02 20:08:17
【问题描述】:
我将 Microsoft Azure ServiceBus 用于队列消息,使用 WCF 进行订阅。我正在尝试实现重试逻辑。我使用 Peak/Lock 来查看消息,然后必须对消息进行一些本地处理。如果该处理失败,我将解锁该消息,以便再次尝试处理它。问题是我需要在处理尝试之间建立一个延迟。目前它被弹出回队列,然后几乎立即处理。两次尝试之间需要大约 2 分钟。
【问题讨论】:
标签: azure queue servicebus
我将 Microsoft Azure ServiceBus 用于队列消息,使用 WCF 进行订阅。我正在尝试实现重试逻辑。我使用 Peak/Lock 来查看消息,然后必须对消息进行一些本地处理。如果该处理失败,我将解锁该消息,以便再次尝试处理它。问题是我需要在处理尝试之间建立一个延迟。目前它被弹出回队列,然后几乎立即处理。两次尝试之间需要大约 2 分钟。
【问题讨论】:
标签: azure queue servicebus
如果您总是需要等待 2 分钟才能重新处理该特定队列的消息,您可以尝试将队列上的锁定超时配置为 2 分钟(加上您预期的处理时间消息),然后让锁过期,而不是解锁它。这样做的缺点是您需要密切关注处理时间,并在需要时延长锁定的超时时间。
另一个选项可能是接收并完成消息,将预定递送设置为未来 2 分钟,然后重新发送消息。这样做的缺点是您需要使用它并确认它,这涉及某些风险(例如,您的进程在您有机会重新发送消息之前就死了)。
【讨论】:
"如果消息在 Peek Lock 模式下从队列中被 Peeked,那么您在消息中没有接收上下文。您可以在 Peek Lock 模式下接收消息,这将在指定的时间间隔内锁定消息队列的'lock duration'属性。锁定的消息在其锁定到期之前无法接收。因此,通过将锁定持续时间设置为2分钟并在Peek Lock模式下接收消息将解决此问题。
您可以编写自定义代码来更新锁定持续时间属性。 Service Bus Explorer、Serverless360 等工具提供了使用图形用户界面更新属性的选项。”
【讨论】: