0

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

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

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

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

4

1 回答 1

0

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

所以,你设置receiveErrorHandlingMove. maxRetryCyclesreceiveRetryCount只是1。_ 每个队列将使用一个不断增长的retryCycleDelay. 您创建的每个队列都会poison自动为其创建一个子队列。您只需从每个poison子队列中读取并使用客户端将其移动到下一个队列。

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

于 2015-02-15T20:24:06.143 回答