MSMQ事件记录没有显示已删除的消息?

时间:2015-07-21 19:58:16

标签: c# windows msmq

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

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

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

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

2 个答案:

答案 0 :(得分:3)

您可以使用MSMQ死信队列。

message.UseDeadLetterQueue = true;

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

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

答案 1 :(得分:1)

事件日志仅适用于MSMQ的健康状况。单个消息发生的事情很简单,并且不会记录在事件日志中。想象一下,如果丢弃了一百万条消息并且必须记录在事件日志中会发生什么。