2012-06-08 39 views
3

我有一个简单的RabbitMQ测试程序,它发送并接收消息给RabbitMQ服务器。我有两台电脑,我发现我的代码是否工作取决于哪台计算机承载RabbitMQ服务器。这里是我的情况(原谅我的MS画图):RabbitMQ:简单测试程序有可能的网络问题

enter image description here

  1. 如果计算机A托管服务器和运行的代码,发送来自A的消息,A,它的工作原理。
  2. 如果计算机A承载服务器,并且我的代码在计算机B上运行,则从B发送消息到A,它就可以工作。
  3. 如果计算机B托管服务器,并且我的代码在计算机A上运行,并将消息从A发送到B,则会出现一个异常,指出“没有指定的端点可到达”。
  4. 如果计算机B托管服务器并运行代码,则将消息从B发送到B,它将起作用。

我想不通为什么场景#3不适合我。

  • 我不认为这是代码,因为我的三个场景完全按照我的预期工作。
  • 我不认为这是防火墙问题,因为我在两台计算机上都关闭了防火墙的情况下运行了这些测试。
  • 我不认为这是计算机B上的RabbitMQ服务器的问题,因为它能够与自己进行通信(情况#4)。
  • 我在尝试场景#3后检查了计算机B上的RabbitMQ日志文件,但没有看到任何有关尝试连接的内容。我认为计算机A在发送请求时根本无法看到计算机B.

我的问题,一般来说,我应该寻找什么东西可能指向我的问题?必须在计算机A上检查一些设置,但不在计算机B上检查。计算机B具有Erlang和RabbitMQ的默认安装。我很确定计算机A也被设置为默认值(我最近没有安装它)。

请帮忙。

回答

2

的问题,当一个尝试连接到B是唯一明显的,因此:

  • 检查一个可以解析B中的主机名到IP地址。为此,请使用nslookup b
  • 检查A可以达到B.运行ping b将对此有所帮助。
  • 使用telnet从A连接到B的RabbitMQ端口(可能是5672):telnet b 5672。如果您看到空白屏幕表示连接已被接受。我敢打赌你会得到某种错误。首先使用b的IP地址尝试这个技巧,然后如果可以的话,用b的主机名来尝试解决它。

总之,只需将其分解为纯粹的网络检查(不涉及RabbitMQ)并从那里开展工作。

+0

我最初设置我的防火墙规则不正确。它现在有效。感谢您的建议。 – user1214135