WCF和MSMQ故障处理

7

有人能解释一下处理传递失败信息的这3种方法之间的区别吗?

  • 毒消息队列服务
  • 死信队列服务
  • 使用响应服务来处理故障

我有《Programming WCF》,但我不太明白何时使用其中一种而不是另一种,或者何时使用多种方法会更合理。谢谢!

2个回答

8

死信和毒信是两个不同的概念。 毒信是可以从队列中读取的消息,但是你的代码不知道如何处理它,因此你的代码会抛出异常。如果这种情况持续一段时间,你希望将此消息放在另一个队列中,以便处理其他消息。这方面的良好方法在MSDN上有描述。

死信是一条甚至没有被队列处理的消息。网络故障或接收 MSMQ 计算机关闭等情况。该消息将在一段时间后由 Windows 自动放入死信队列。因此,建议编写一个监视死信队列的服务。


2
毒消息/死信消息队列用于将被确定为无法投递的消息放置在一个队列中,该队列将不再尝试投递它们。如果您希望手动查看失败的消息并在以后处理它们,则可以这样做。当您希望避免由于反复重试坏消息而降低系统性能时,您会使用这些类型的队列。
另一方面,响应服务可用于通知发送者处理消息时出现错误。通常在这种情况下,您不打算手动处理坏消息,并且需要让发送消息的系统知道请求已被拒绝。
请注意,这两种方式并不是互斥的。如果您正在使用队列,则始终存在消息序列化可能发生变化从而破坏在队列中的消息的情况,因此即使您使用响应服务,仍可能需要死信队列。

我很感谢您的回答,但它并不完全是我所问的。首先,我想知道毒药和死信之间的区别。此外,我更关心处理这些队列的服务,而不是队列本身。 - chessguy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接