【问题标题】:MSMQ Event Logging doesn't show dropped messages?MSMQ 事件日志不显示丢弃的消息?
【发布时间】:2015-10-11 11:10:04
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# windows msmq


    【解决方案1】:

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

    message.UseDeadLetterQueue = true;
    

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

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

    【讨论】:

    • 打开负源日志是解决方案。事件日志中没有原因(为了便于监控)让一些运维人员感到沮丧,但至少这是一个开始。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-06-26
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      相关资源
      最近更新 更多