【问题标题】:MSMQ messages disappear from outbound queue but never arrive in the inbound queueMSMQ 消息从出站队列中消失,但从未到达入站队列
【发布时间】:2012-05-22 20:03:33
【问题描述】:

在我们新的内部云上设置现有应用程序时遇到一个奇怪的问题。

我有一个简单的消息传递系统,它将消息从一台服务器 (Server1) 推送到另一台服务器 (Server2) 上的 MSMQ。消息从出站消失,但从未出现在入站队列中。

当我使 Server2 msmq 脱机时,消息在 Server1 上建立。在 Server2 上重新启动 Msmq 会导致 Server1 上的出站队列中的消息消失 - 但消息仍然永远不会到达 Server2。

详情:

  1. MSMQ 设置为工作组模式,这是虚拟网络的要求。
  2. 队列是私有的。
  3. 权限设置为允许某些用户访问。

有没有人知道为什么会发生这种情况,或者我可以如何追踪这个问题。

【问题讨论】:

    标签: msmq


    【解决方案1】:

    可能是远程专用队列是事务队列,而您以非事务方式发送消息,反之亦然。如果队列上的事务设置和消息不匹配,消息就会消失!

    【讨论】:

    • 这完全是我需要的!我一直在寻找解决方案,终于找到了。谢谢!
    • 是的。 . . 非常有帮助,即使您启用并查看 msmq 日志记录,非事务性似乎也成功了。消息永远不会到达。 using ( var transaction = new MessageQueueTransaction()) { transaction.Begin(); messageQueue.Send(message, transaction); transaction.Commit(); }
    【解决方案2】:

    我在过去看到过这种直接格式名称,它被设置为类似

    DIRECT=操作系统:192.16.8.0.1\PRIVATE$\MyQueue

    我应该在哪里指定 DIRECT=TCP:192.168.0.1\PRIVATE$\MyQueue

    见: http://msdn.microsoft.com/en-us/library/windows/desktop/ms700996(v=vs.85).aspx

    @John Breakwell 在这里注意到http://blogs.msdn.com/b/johnbreakwell/archive/2010/01/22/why-does-msmq-keep-losing-my-messages.aspx

    用于寻址消息的服务器名称与目标机器不匹配 当 MSMQ 通过网络接收到一条消息时,它总是验证这台机器是正确的接收者。这是为了确保诸如 DNS 错误配置之类的事情不会导致消息被传递到错误的位置。相反,除非正确设置了 IgnoreOSNameValidation 注册表值,否则这些消息将被丢弃。您可能希望使用面向 Internet 的 MSMQ 服务器来执行此操作,例如,在 Internet 上 MSMQ 客户端可见的域和服务器名称通常与真实名称没有相似之处(出于良好的安全原因)。

    【讨论】:

      【解决方案3】:

      这听起来像是权限或地址问题。

      尝试在应用程序和服务日志 -> Microsoft -> Windows -> MSMQ下启用事件日志> 称为End2End

      此日志应该准确地告诉您将消息传递到预期目标队列时出了什么问题。

      不:对于每次成功交付,此日志中应该引发三个事件:

      1. ID 为 blah 的消息来自网络(即消息来自远程发件人)
      2. ID 为 blah 的消息已发送到队列 blah(即,消息转发到本地队列)
      3. ID 为 blah 的消息被放入队列 blah(即消息到达本地队列)

      假设您使用的是 Server 2008 及更高版本。

      【讨论】:

        【解决方案4】:

        您可以将负源日志添加到发送应用程序代码中,以准确找出根本原因。很可能是您已经收到的两个答案之一。

        【讨论】:

          【解决方案5】:

          消息是否到达服务器 2 上的死信队列?

          【讨论】:

            猜你喜欢
            • 2018-02-20
            • 1970-01-01
            • 2011-06-02
            • 2012-07-23
            • 1970-01-01
            • 2017-06-29
            • 2012-02-06
            • 1970-01-01
            • 2014-08-28
            相关资源
            最近更新 更多