好的,所以我一直试图绕过队列 -> 死信队列 -> 死信队列的毒子队列 -> ?
现在,据我了解,如果消息处理失败或接收方不支持消息上的操作,则可以将消息发送到毒队列。 我发现的大多数文章都显示了使用与主服务相同的合同来实现毒服务。如果错误是合约不支持提供的消息,那岂不是把对毒消息队列有毒的消息放入毒消息队列?
拥有一个可以处理毒物队列中任何东西的处理程序不是更有意义吗?下面假设一个 WCF 消息,它可能也不安全(并且完全未经测试),但是有没有办法进行万无一失的毒物队列处理?我越是尝试通过排队来思考边缘情况,我就越觉得不可能有一个完整的系统来处理所有可能性。
[OperationContract(IsOneWay = true, Action = "*")]
[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
public void CatchAll(Message message)
{
// Log somewhere?
}
另一个想法是有一个触发器,将所有消息从中毒队列移回死信队列以再次处理 - 这可能会再次中毒并无限循环。
我想具体的问题是..人们如何处理死信队列中的毒消息?一般的问题是——你到底是如何处理 MSMQ 中的所有情况的?