2012-05-15 153 views
4

我在我们的新内部云中设置现有应用程序时出现了一个奇怪的问题。MSMQ消息从出站队列中消失,但从未到达入站队列

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

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

细节:

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

有没有人有任何想法,为什么会发生这种情况,或者我如何才能找到问题。

回答

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

@约翰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

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

尝试启用事件日志下应用程序和服务日志 - >微软 - >的Windows - >MSMQ称为端到端

这个日志应该告诉你到底发送的消息到期望的目标队列到底发生了什么问题。

都能跟得上:对于每一个成功传递应该在该日志中提出的三个事件:

  1. 消息与ID等等来通过网络(即,消息已经从一个远程发送器到达)
  2. 消息与ID等等被发送到队列等等(即,消息转发到本地队列)
  3. 消息与ID等等放入队列等等(即,消息在本地队列到达)

假设哟你正在使用Server 2008及更高版本。

3

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

+0

这完全是我所需要的!我一直在寻找一个解决方案,并最终找到它。谢谢! –

0

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

0

邮件是否到达服务器2上的死信队列?