Stomp和ActiveMQ之间的连接失败

时间:2014-07-01 05:24:20

标签: activemq firewall stomp

我遇到了php STOMP连接与在不同服务器上运行的ActiveMQ代理之间的通信问题。布局如下;

服务器A有一个包含该行的简单php脚本;

$stomp = new Stomp('tcp://<ServerB>:61550');

服务器B有一个运行以下transportConnector设置的AMQ代理;

<transportConnectors>
    <transportConnector name="tcp" uri="tcp://0.0.0.0:61500"/>
    <transportConnector name="stomp" uri="stomp://0.0.0.0:61550"/>
    <transportConnector name="ssl" uri="ssl://0.0.0.0:61700?needClientAuth=true"/>
</transportConnectors>

服务器B还有一个Java客户端充当许多队列的消费者。

问题在于,当我们在ServerA上运行脚本时,它失败并出现以下错误;

  

致命错误:未捕获的异常'StompException',消息'Server is not responding'

在ServerB上的ActiveMQ日志中,我们得到了;

  

2014-07-01 11:33:32,754 |警告|传输连接到:tcp:// ServerA:48692失败:java.io.IOException:未知数据类型:69 | org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ Transport:tcp:/// ServerA:48692 @ 61500

     

2014-07-01 11:33:32,755 |警告|传输连接到:tcp:// ServerA:48692失败:org.apache.activemq.transport.InactivityIOException:无法发送,通道已失败:tcp:// ServerA:48692 | org.apache.activemq.broker.TransportConnection.Transport |异步异常处理程序

我已经推断出失败的原因是由于某种原因,来自A的STOMP请求被端口61500上的TCP侦听器而不是端口61550上的STOMP侦听器拾取,并且由于协议不匹配而失败

我尝试将端口61500的tcp transportConnector更改为stomp连接器,这解决了问题。但是其他一些应用依赖于61500是tcp,所以它不是解决方案。

我一直在和我们的系统管理员说话,他们确定防火墙设置正确,即使这样他们在ServerB上完全禁用防火墙也出现了同样的问题,所以我不知道这是否是问题的一部分。我们有另一台服务器具有几乎相同的activemq配置设置(tcp on 61500和stomp on 61550),它工作正常,不同的是它有一个用于ActiveMQ Web工具的jetty配置。

我不确定要尝试什么或者如何发生这种情况。如果有人有任何建议或以任何方式提供帮助,我们将不胜感激。

可能相关,但我不知道这些是什么意思,这里是telnet输出;

ServerA - &gt; ServerB 61550

telnet serverB 61550
Trying <serverB address>...
Connected to serverB.
Escape character is '^]'.
ðActiveMQ       Þ
MaxFrameSizÿÿÿ  CacheSize
CacheEnabledSizePrefixDisabled  MaxInactivityDurationInitalDelay'TcpNoDelayEnabledMaxInactivityDurationu0TightEncodingEnabledStackTraceEnabled

ServerA - &gt; ServerB 61500

telnet serverB 61500
Trying <serverB address>...
Connected to serverB.
Escape character is '^]'.
ðActiveMQ       Þ
MaxFrameSizÿÿÿ  CacheSize
CacheEnabledSizePrefixDisabled MaxInactivityDurationInitalDelay'TcpNoDelayEnabledMaxInactivityDurationu0TightEncodingEnabledStackTraceEnabledConnection closed by foreign host.

ServerB localhost 61550

telnet localhost 61550
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
^]
telnet> quit
Connection closed.

ServerB localhost 61500

telnet localhost 61500
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
ðActiveMQ       Þ
MaxFrameSizÿÿÿ  CacheSize
CacheEnabledSizePrefixDisabled MaxInactivityDurationInitalDelay'TcpNoDelayEnabledMaxInactivityDurationu0TightEncodingEnabledStackTraceEnabledPuTTYConnection closed by foreign host.

我在网上找到这些字符的唯一提法就是这篇文章ActiveMQ remote connections refused despite 0.0.0.0 in broker URL

我们很遗憾没有运行卡拉夫,我不确定它对我们有什么影响。我无法在61550上找到任何其他内容。

netstat -tulpn | grep 61550
tcp6       0      0 :::61550                :::*                    LISTEN      12870/java

感谢所有阅读过这一切的人,尽量提供尽可能多的信息。

1 个答案:

答案 0 :(得分:-1)

您似乎使用错误的URI连接到STOMP连接器。

替换 $stomp = new Stomp('tcp://<ServerB>:61550');

$stomp = new Stomp('stomp://<ServerB>:61550');

观察协议是stomp,而不是tcp。