有人可以向我解释这三种处理传递失败消息的方法之间的区别吗?
- 中毒队列服务
- 死信队列服务
- 使用响应服务来处理故障
我有“Programming WCF”,但我真的不明白什么时候你会使用其中一个而不是另一个,或者什么时候使用多个它们是有意义的。谢谢!
死和毒是两个不同的概念。有毒消息是可以从队列中读取的消息,但您的代码不知道如何处理它,因此您的代码会给出异常。如果这种情况持续一段时间,您希望将此消息放在不同的队列中,以便处理您的其他消息。MSDN上描述了一个很好的方法。
死信是队列甚至不处理的消息。网络中断或接收 MSMQ 计算机已关闭。类似的东西。一段时间后,Windows 会自动将消息放入死队列。所以建议编写一个监控死队列的服务。
有毒消息/死信消息队列用于将已确定为无法投递的消息放置在不再尝试投递的队列中。如果您可能想要手动查看失败的消息并在稍后处理它们,您可以这样做。当您希望通过一遍又一遍地重试来防止坏消息降低系统性能时,您可以使用这些类型的队列。
另一方面,响应服务将用于通知发送者处理消息时出错。通常在这种情况下,您不打算手动处理错误消息,并且需要让发送消息的系统认为请求已被拒绝。
请注意,这些不是排他性的。如果您使用队列,则消息序列化总是有可能发生足够的变化以破坏队列中的消息,在这种情况下,即使您使用响应服务,您仍可能希望拥有一个死信队列。