2012-02-03 201 views
0

我有一个使用msmq的应用程序出现问题:在特定的机器上,此应用程序可以发送msmq消息,但似乎没有收到任何消息。无法接收msmq消息

这只发生在特定的机器上(使用XP)。

如何调试问题?我在哪里可以找到问题出现的地点以及为什么?

在远程计算机上,消息停留在传出队列中。

这台机器曾经能够接收消息,有一天它停止工作。机器上发生的事情并不明显,这可能与接收信息的能力丧失有关。

我检查过1801端口是打开的。

当你说“收到”的消息(我没有发现在事件查看器中的任何东西)

+0

“坏接收器”机器是否已重新启动(整机或消息传递服务)? **它是否成功接收过消息?**有多少台机器正在连接到此机器的队列中?这台机器上有多少个队列?您应该编辑您的问题,以包括已经尝试过的补救措施的项目符号列表。什么安全方案被应用到队列中?私人或公共? – 2012-02-03 14:34:59

+0

是很多次... – mnrtyrpt123 2012-02-03 14:36:29

回答

1

,你的意思,你是无法从队列中删除的消息,或者没有消息可以传递到机?

最常见的原因是权限 - 最简单的测试是为每个人和匿名登录设置完全控制。

=== 2月4日====

如果消息停留在传出队列,则队列的状态是很重要的。
如果它是“连接”那么问题是让消息被目标队列管理器接受。
如果它是“等待连接”或类似的话,那么在网络连接级别会出现问题。

由于消息正在等待传递,因此没有错误状态,所以在这里没有日志记录会有帮助。 MSMQ预计信息会被延迟,因此在这里没有任何问题,因为假设未来某个时候阻塞会被清除。最终消息会超时并被丢弃,除非您使用负面日志记录。

=== 2月8日====

OK,如果 “DIRECT = TCP:1.2.3.4 \私人$ \ myQueue中” 的作品,但 “DIRECT = OS:服务器\私人$ \ myQueue中” 隐而不宣那么它看起来像名称解析问题。
检查发送机器是否使用它用于名称解析的DNS服务器的IP地址;检查此服务器以查找目标计算机名称的条目。在发送机器上检查HOSTS和LMHOSTS文件以查找目标计算机名称的任何条目。您甚至可以尝试向HOSTS添加一个条目,将目标机器名称映射到IP地址。

干杯
约翰Breakwell

+0

正如我所说的,消息卡在远程机器上的传出队列中(所以消息没有传递给有问题的机器) – mnrtyrpt123 2012-02-03 14:40:15

+0

我假定你的意思是传出队列的状态。如何找出该队列的状态(如果可能,不可编程)?谢谢。按照您的建议更改权限并不能解决问题(所以我想这指向网络问题)。 – mnrtyrpt123 2012-02-06 09:38:33

+0

在计算机管理中,State是查看传出队列时的第5列。下一跳对于检查您是否使用正确的IP地址也很有用。 – 2012-02-06 22:38:01

1

要调试的消息队列的问题:

  • 使用应用程序来检查机器和队列。建议写你自己的,或者类似QueueExplorer demo。这是确定问题性质的最快方式:端点权限/安全性,网络连接,格式错误的消息等。

  • 在发送者端执行日志记录。也许有一个错误消息被错误的接收者返回,或者发送者不能建立连接,或者消息太大。

1

我通常在Network-Service下运行该应用程序,并为此用户的Queues设置完全权限设置。如果我有桌面端点,请尝试连接到网络服务用户的消息传递。

试试看可能有用。

+0

等待,您授予*整个服务帐户,不只是由您的应用程序使用,还有许多*完全权限? – 2012-02-08 21:18:00

+0

Msmq首先是一个传输协议。如果您希望n台计算机使用它来交换消息,则默认情况下,您在AD中使用同一用户的所有计算机上启动msmq,或使用网络服务。说明这一点可以确保如果消息排队,它将到达目标主机。第二部分是您向应用程序用户授予从队列发送/接收消息的适当权限。另一个选项是连接到具有发送/接收权限集的用户下的队列。 – ruslander 2012-02-09 14:43:09

1

Receiver正在1801上侦听,但发送者可以连接到该端口吗?在发件人上,转到命令行并执行:telnet receiverHostName 1801
这将检查连接是否可以打开到该端口。也许防火墙或其他软件阻止流量?

+0

+1。最终这是我的问题。这是一件很基本的事情,我想很多人会忽略他们的文章/教程。我在服务主机上打开了端口1801(端口MSMQ监听传入的流量),并且它正在工作。 – 2012-02-29 07:20:25