【发布时间】:2014-08-21 14:00:06
【问题描述】:
我遇到了 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”和消息“服务器没有响应”
在 ServerB 上的 ActiveMQ 日志中我们得到;
2014-07-01 11:33:32,754 |警告 |传输连接到:tcp://ServerA:48692 失败:java.io.IOException:未知数据类型:69 | org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ 传输: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 配置设置几乎相同(61500 上的 tcp 和 61550 上的 stomp)工作正常,不同之处在于它有一个用于 ActiveMQ Web 工具的码头配置。
我不确定要尝试什么或如何发生这种情况。如果有人有任何建议或可以以任何方式提供帮助,将不胜感激。
可能相关,但我不知道这些是什么意思,这里是 telnet 输出;
ServerA -> ServerB 61550
telnet serverB 61550
Trying <serverB address>...
Connected to serverB.
Escape character is '^]'.
ðActiveMQ Þ
MaxFrameSizÿÿÿ CacheSize
CacheEnabledSizePrefixDisabled MaxInactivityDurationInitalDelay'TcpNoDelayEnabledMaxInactivityDurationu0TightEncodingEnabledStackTraceEnabled
ServerA -> 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 本地主机 61550
telnet localhost 61550
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
^]
telnet> quit
Connection closed.
ServerB 本地主机 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。
不幸的是,我们没有运行 Karaf,我不确定它还能如何适用于我们。我在 61550 上找不到其他任何东西。
netstat -tulpn | grep 61550
tcp6 0 0 :::61550 :::* LISTEN 12870/java
感谢所有阅读过所有这些并试图提供尽可能多的信息的人。
【问题讨论】: