为什么将消息放入死信队列(MSMQ)

本文关键字:队列 MSMQ 消息 为什么 | 更新日期: 2023-09-27 18:17:33

前言:
我有一个web应用程序,它不时发送MSMQ消息(UseDeadLetterQueue = true)。我还可以看到其中一些消息被放入系统死信队列中。但是,我不能直接从"计算机管理"控制台看到失败的原因。
我找到了以下资源:
https://msdn.microsoft.com/en-us/library/ms789035 (v = vs.110) . aspx,
它允许检查消息状态和失败。但它仅在WCF范围内可用(因为它使用OperationContext)。


基本上检查消息状态和失败原因是我需要的,但是我如何配置一个WCF服务来监听死信队列并跟踪里面的所有消息,而不管发送者是谁?

或者是否有其他(非wcf)方法来获得为什么特定消息被放入死信队列的原因?

为什么将消息放入死信队列(MSMQ)

您找到的链接文章告诉您如何创建从DLQ获取消息的WCF服务。注意,它告诉您必须使用AddressFilterMode = AddressFilterMode。无论发送者是谁,都可以删除所有消息。

注意:当消息在DLQ上结束时,您将没有关于发生此事件的原因的信息。无论您是否使用WCF,这些信息都不会存储在队列中。

例如,如果您的接收者是使用MSMQ绑定的WCF侦听器,则抛出的任何异常都将导致消息无法传递。MSMQ将重试一段时间,然后最终放弃并将消息放入DLQ。因此,如果您想知道最初的原因,您需要在WCF服务中添加一些跟踪来捕获和跟踪抛出的异常。