MSMQ 事件日志记录不显示丢弃的消息?

MSMQ Event Logging doesn't show dropped messages?

所以我正在尝试将 MSMQ 消息从一台机器转发到另一台机器(这太容易了 - 我很惊讶),但是房子的操作方面的要求之一是我们需要能够当远程服务器决定不接受消息时,在某处查看日志条目。例如,如果我尝试发送到一个不存在的队列,如下所示:

MessageQueue remoteQueue = new MessageQueue(@"FormatName:Direct=OS:machinename\private$\notarealqueue");

remoteQueue.Send("Test", MessageQueueTransactionType.Single);

邮件进入本地传递队列,似乎通过网络发送,但由于队列不存在,远程 MSMQ 管理器丢弃了邮件。但是,在事件日志中我找不到有关消息掉落在地板上的条目,这让人感到紧张。 Microsoft/Windows/MSMQ/EndToEnd 日志似乎只涉及成功的消息,这似乎不是特别有用。是否有我在某处没有看到的日志?

您可以为此使用 MSMQ 死信队列。

message.UseDeadLetterQueue = true;

启用该功能后,如果无法传递消息,它将被发送到两个系统死信队列之一 - 一个用于事务性消息,一个用于非事务性消息。您还会在那里找到消息未送达的原因,即原始目标队列、完整消息正文、标签等。

您可以使用一种管理队列的工具来重新发送或恢复这些消息。

事件日志仅针对MSMQ的健康状态。单个消息发生的事情是微不足道的,不会记录在事件日志中。想象一下,如果一百万条消息被丢弃并且必须记录在事件日志中会发生什么。