当前位置: 首页 > 知识库问答 >
问题:

Stomp和ActiveMQ之间的连接失败

艾阳羽
2023-03-14

php STOMP连接和运行在不同服务器上的ActiveMQ代理之间的通信出现问题。布局如下;

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

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

<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,所以它不是一个解决方案。

我已经和我们的系统管理员谈过了,他们肯定防火墙设置正确,即使这样,他们也完全禁用了服务器上的防火墙,同样的问题也发生了,所以我不知道这是否是问题的一部分。我们有另一个服务器,它的activemq配置设置几乎相同(tcp在61500上,stomp在61550上),它工作得很好,不同的是它有一个用于activemq web工具的jetty配置。

我不知道该尝试什么,也不知道这是如何发生的。如果任何人有任何建议或可以在任何方面提供帮助,将不胜感激。

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

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

我能在web上找到的关于这些字符的唯一提及是这个post ActiveMQ远程连接被拒绝,尽管broker URL中有0.0.0.0。

不幸的是,我们不运行卡拉夫,我不知道它将如何适用于我们。我在61550上找不到其他监听的东西。

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

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

共有1个答案

咸星波
2023-03-14

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

替换$Stomp=new Stomp('tcp:// :61550');

 类似资料:
  • 试图通过<code>github连接到AWS上的ActiveMQ实例。com/go-stomp/stomplibrary。 以下代码抛出<code>无效命令

  • 有人能给我指出一个不错Java例子吗?在这个例子中,践踏客户端被用来连接到ActiveMQ。我还对以下内容感兴趣: 是否支持故障转移? 如何创建持久订阅? Stachp支持异步消息传递吗?示例?我想我必须为它实现MessageListener接口,但我找不到它的示例。

  • STOMP 一种简单的消息传递协议,最初创建用于脚本语言,其框架受 HTTP 启发。 STOMP 得到广泛支持,心脏长连接一小时左右失去连接 失去到未定义的连接-建立连接后失去连接非常适合在 WebSocket 和 web 上使用。 SockJS SockJS是WebSocket技术的一种模拟,在表面上,它尽可能使用原生webSocket API,但是再底层非常智能,优先使用原生WebSocket,如果在不支持WebSocket的浏览器中,会自动降为轮询的方式。

  • 当我码头工人运行Kafka集装箱 [2018-07-15 01:31:58,369]信息打开到服务器本地主机/127.0.0.1:2181的套接字连接。将不尝试使用SASL(未知错误)(org.apache.zookeeper.clientcnxn)[2018-07-15 01:31:58,373]警告会话0x0服务器为空,意外错误,关闭套接字连接并试图重新连接(org.apache.zookee

  • 我正在使用ActiveMQ客户端库将我的服务器应用程序连接到ActiveMQ。几个不同的消费者和生产者在单个线程中运行。、和之间的关系应该如何? 每个JVM一个连接工厂 每个JVM一个到代理的连接或n个连接,每个使用者一个 n个会话,每个消费者一个(Javadoc似乎强烈建议这样做)

  • 我们正在将SpringWebSockets集成到我们的应用程序中,我运行了HelloWorld示例,令人惊讶的是,spring为我们连接了一切,以便将服务器端通知推送到客户端。 不过,我有一些简单的问题 1) 队列是如何创建的?我使用的是ActiveMQ,队列名称与我在目的地中指定的不同(例如,像greetings-user3n9\u jn3i)。 2)目标名称是否不同于队列? 3) 我正在使用A