3

我有一个简单的 RabbitMQ 测试程序,它向 RabbitMQ 服务器发送然后接收消息。我有两台计算机,我发现我的代码是否有效取决于哪台计算机托管 RabbitMQ 服务器。这是我的情况(请原谅我的 MS Paint):

在此处输入图像描述

  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 也设置为默认值(我最近没有安装它)。

请帮忙。

4

1 回答 1

2

该问题仅在 A 尝试连接到 B 时才明显,因此:

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

总之,只需将其剥离为纯网络检查(不涉及 RabbitMQ)并从那里开始工作。

于 2012-06-12T03:48:57.680 回答