无法在 LAN 上的两台 PC 之间创建连接(windows,RabbitMQ)

Unable to create connection between two PC on LAN (windows, RabbitMQ)

我正在尝试在两台本地 PC 之间发送消息 (Windows OS)。我已使用 LAN 连接连接到这些 PC。 RabbitMQ 服务器安装在 10.100.94.25 PC 上。我正在尝试从 10.100.94.28 PC 创建连接。我已经使用 windows 命令提示符从 客户端 PC (10.100.94.28) ping 我的 rabbit MQ 服务器 PC (10.100.94.25) .它是成功的。但是,当我尝试从代码创建连接时,它不起作用。请检查我的代码和下面的错误日志。错误告诉我 "timeout error"。我该怎么办?

我已成功从同一台 PC 发送和接收消息。这意味着,当我使用 localhost 作为主机时,它工作得很好。那么我在这里缺少的用于远程访问的微小触摸是什么?

connectionFactory = new ConnectionFactory();
connectionFactory.setUsername("shoshi");
connectionFactory.setPassword("shoshi");
connectionFactory.setHost("10.100.94.25");
connectionFactory.setPort(5672);
connection = connectionFactory.newConnection(); // this is 451 number line

错误:

May 01, 2016 6:00:35 PM com.chat.UI initRabbitMQ
SEVERE: null
java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:579)
    at com.rabbitmq.client.impl.FrameHandlerFactory.create(FrameHandlerFactory.java:32)
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:714)
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:760)
    at com.chat.UI.initRabbitMQ(UI.java:451)
    at com.chat.UI.<init>(UI.java:48)
    at com.chat.UI.run(UI.java:405)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
    at java.awt.EventQueue.access0(EventQueue.java:103)
    at java.awt.EventQueue.run(EventQueue.java:694)
    at java.awt.EventQueue.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

这很可能是 (Windows) 防火墙问题,请确保允许连接到该端口。

在我的 ActiveMQ 设置中,我通常检查连接的方式是:

我有一个测试器 EJB,它订阅了 ActiveMQ 系统上的一个主题。我启动我的 ActiveMQ 系统,然后 运行 我自己的服务器上的 EJB 在另一个系统上。如果连接一切正常,那么此 EJB 将在 ActiveMQ 仪表板上显示为使用者。此方法确保连接设置没有任何关于设置连接的细节问题。由于您可以 ping 通,因此理想情况下,此测试应该会成功通过。

如果成功,您需要确保您的制作人工作正常。 如果失败,您肯定知道连接设置不正确。

我在猜测5672端口是否打开。或者防火墙是否阻止它。感谢 cantSleepNow and Thomas 的指导。

那么,我做了什么?我只是使用 telnet 检查端口号。命令是 telnet IP_ADDRESS PORT_NUMBER。如果 telnet 未被识别为命令,则必须启用它。按照以下说明操作:

要安装 Telnet,请按照以下说明操作:

  1. 单击开始,然后单击 select 控制面板。
  2. Select 程序和功能。
  3. Select 打开或关闭 Windows 功能。
  4. Select Telnet 客户端选项。
  5. 单击“确定”。

或者,follow this link

我能够通过使用 telnet localhost 5672 命令获得响应。但不使用 telnet 10.100.94.25 5672 命令。

此外,从 THIS POST 我得到:

  • connection refused 表示该端口运行 上没有任何内容
  • accepted 表示该端口
  • 上有东西 运行
  • timeout 表示防火墙阻止访问

我的错误日志显示 java.net.ConnectException: Connection timed out: connect

所以,现在我确定这是防火墙问题。 然后我就按照THIS TUTORIAL打开erlang进行远程访问。现在它正在运行。

要知道您 PC 的 IP 地址,只需使用 CMD 输入 ipconfig