我在新的内部云上设置现有应用程序时遇到一个奇怪的问题。
我有一个简单的消息传递系统,它将消息从一个服务器(Server1)推送到另一个服务器(Server2)上的MSMQ。消息从出站消失,但从未出现在入站队列中。
当我将Server2 msmq脱机时,消息会在Server1上建立。在Server2上重新启动Msmq会导致Server1上出站队列中的消息消失 - 但消息仍然永远不会到达Server2。
细节:
有没有人知道为什么会这样,或者我如何追查这个问题。
答案 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:对于每次成功交付,此日志中应该有三个事件:
假设您使用的是Server 2008及更高版本。
答案 3 :(得分:0)
您可以向发送应用程序代码添加负源日记功能,以确切了解根本原因。很可能是你已经收到的两个答案中的一个。
答案 4 :(得分:0)
邮件是否在服务器2上的死信队列中?