我正在使用带有WCF的MSMQ 4。我们有一个Microsoft Dynamics插件将消息放入队列。服务接收消息并向另一个Web服务器发出HTTP请求。 Web服务器通过将另一个消息放在不同的队列上来响应。第二个服务接收消息并将响应发送回Dynamics ...
我们将重试队列设置为重试3次,然后等待5分钟再重试。动态系统有时需要很长时间(由于其他插件),我们可以在数据库事务提交之前进行往返。用户没有看到更新再过5分钟。
我很好奇是否有办法配置重试机制以递增方式重试。所以,第一次失败时,它只会等待几秒钟。如果第二次失败,则等待两次。重试之间的时间不断增长。
减少重试之间的时间的问题是,错误的消息很容易填满日志文件。
答案 0 :(得分:0)
事实证明,没有内置的方法可以做到这一点。一个稍微涉及的选项是创建多个队列,每个队列都有自己的重试/毒性子队列,每个队列都有不断增加的重试延迟。您可以为每个队列重用相同的处理程序 - 唯一改变的是配置。您还需要一个可以读取有毒子队列(service
)并将消息移动到链中的下一个队列(client
)的处理程序。
因此,您将receiveErrorHandling
设置为Move
。 maxRetryCycles
和receiveRetryCount
只是1
。每个队列都将使用不断增长的retryCycleDelay
。您创建的每个队列都将自动为其创建poison
子队列。您只需从每个poison
子队列中读取并使用客户端将其移动到下一个队列。
我确信有人可以编写一些代码,这些代码会自动创建具有不断增长的retryCycleDelay
的N个队列,并以编程方式将其连接起来。由于每个队列都是相同的处理程序/客户端,因此不会有什么大不了的。