【问题标题】:MSMQ + WCF - Retry with Growing DelayMSMQ + WCF - 重试,延迟增加
【发布时间】:2014-07-10 07:41:58
【问题描述】:

我正在使用带有 WCF 的 MSMQ 4。我们有一个 Microsoft Dynamics 插件将消息放入队列。服务获取消息并向另一个 Web 服务器发出 HTTP 请求。 Web 服务器通过将另一条消息放在不同的队列中来响应。第二个服务接收消息并将响应发送回 Dynamics...

我们将重试队列设置为重试 3 次,然后等待 5 分钟再重试。 Dynamics 系统有时需要很长时间(由于其他插件),我们可以在数据库事务提交之前往返。用户在 5 分钟内没有看到更新。

我很好奇是否有办法配置重试机制以增量重试。因此,第一次失败时,它只等待几秒钟。如果它第二次失败,它会等待两次。而且重试之间的时间越来越长。

仅减少重试之间的时间的问题在于,错误消息很容易填满日志文件。

【问题讨论】:

    标签: wcf message-queue msmq netmsmqbinding


    【解决方案1】:

    事实证明,没有内置的方法可以做到这一点。一个稍微复杂的选项是创建多个队列,每个队列都有自己的重试/毒药子队列,每个队列的重试延迟都在增加。您可以为每个队列重用相同的处理程序 - 唯一改变的是配置。您还需要一个可以读取毒子队列 (service) 并将消息移动到链中的下一个队列 (client) 的处理程序。

    因此,您将 receiveErrorHandling 设置为 MovemaxRetryCyclesreceiveRetryCount 只是 1。每个队列将使用不断增长的retryCycleDelay。您创建的每个队列都会自动为其创建一个poison 子队列。您只需读取每个 poison 子队列并使用客户端将其移动到下一个队列。

    我确信有人可以编写一些代码来自动创建 N 个队列,并以不断增长的 retryCycleDelay 并以编程方式将其全部连接起来。由于每个队列都使用相同的处理程序/客户端,因此没什么大不了的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多