MSMQ消息从出站队列中消失,但从未到达入站队列

时间:2012-05-15 10:13:33

标签: msmq

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

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

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

细节:

  1. MSMQ在工作组模式下设置,因为这是虚拟网络要求。
  2. 队列是私密的。
  3. 权限设置为允许某些用户访问。
  4. 有没有人知道为什么会这样,或者我如何追查这个问题。

5 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

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

DIRECT = <强> OS :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客户端可见的域名和服务器名称通常与真实客户端不相似(出于安全原因)。

答案 2 :(得分:3)

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

尝试在应用程序和服务日志下启用事件日志 - &gt; Microsoft - &gt; Windows - &gt; MSMQ 名为 End2End

此日志应该告诉您将消息传递到预期目标队列的确切错误。

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

  1. 带有ID blah的消息来自网络(即消息来自远程发件人)
  2. 带有ID blah的消息被发送到队列blah(即,消息转发到本地队列)
  3. 带有ID blah的消息被放入队列blah(即消息到达本地队列)
  4. 假设您使用的是Server 2008及更高版本。

答案 3 :(得分:0)

您可以向发送应用程序代码添加负源日记功能,以确切了解根本原因。很可能是你已经收到的两个答案中的一个。

答案 4 :(得分:0)

邮件是否在服务器2上的死信队列中?