4

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

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

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

细节:

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

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

4

5 回答 5

5

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

于 2012-05-16T09:27:20.807 回答
4

这听起来像是一个权限或解决问题。

尝试在Applications and Services Logs -> Microsoft -> Windows -> MSMQ下启用名为End2End的事件日志。

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

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

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

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

于 2012-05-15T11:14:06.740 回答
4

我过去曾使用直接格式名称看到它,它被设置为类似

直接=操作系统: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 客户端可见的域和服务器名称通常与真实名称没有相似之处(出于良好的安全原因)。

于 2013-02-20T17:39:11.793 回答
0

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

于 2012-05-22T06:09:06.660 回答
0

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

于 2012-05-17T19:51:36.780 回答