WCF + MSMQ 4:谁将消息从重试队列移回应用程序队列?

时间:2012-01-25 19:55:43

标签: wcf msmq msmq-wcf

这是一个简单的问题,但我无法找到答案。

假设我的消息被放置到重试队列(谁创建重试队列?它是WCF还是MSMQ服务?)

5分钟后(这是我的重试延迟)该消息返回到应用程序队列。

问题:谁在超时后将消息从重试队列移动到应用程序队列?

奖金问题:如何跟踪延迟?消息是否获得“移动”时间戳和“重试”时间戳?

3 个答案:

答案 0 :(得分:2)

使用MSMQ 4.0的WCF确实提供了automatic retry and poison message handling,尽管Hugh的答案对于旧版本的MSMQ是正确的。

根据评论进行修改 在识别将消息移动到重试队列并返回的过程时,我假设它是MSMQ服务本身,因为这是MSMQ 4.0中的新功能。 WCF参与包装所有这些活动的事务,当然还有MSMQ处理队列中的消息。

答案 1 :(得分:1)

使用标准msmq绑定的WCF( netMsmqBinding msmqIntegrationBinding )不支持重试。所以回答你的问题:

谁创建了重试队列? - 你这样做。

谁在超时后将消息从重试队列移动到应用程序队列? - 你这样做。

如何跟踪延迟? - 你必须这样做。

NServiceBus是开源的,可以使用MSMQ进行传输。此产品提供开箱即用的重试功能,但不使用WCF。

<强>更新

以上内容适用于MSMQ 3及以下版本。

答案 2 :(得分:0)

根据这篇文章Handling Poison Messages,MSMQ 4提供了一些新功能,允许应用程序使用子队列来处理有害消息。这些功能是:

  • 中止计数器
  • 移动计数器
  • 在主队列和子队列之间以及子队列之间移动消息的能力。

所以看起来实际的移动是由WCF处理的,而不是MSMQ;而且MSMQ现在只有支持有害消息和重试处理的工具。