ActiveMQ 到 HornetQ 导致异常
Posted
技术标签:
【中文标题】ActiveMQ 到 HornetQ 导致异常【英文标题】:ActiveMQ to HornetQ causes exception 【发布时间】:2013-03-25 09:50:00 【问题描述】:我正在尝试使用 ActiveMQ 将 JMS 消息发送到使用 HornetQ 的服务器,但遇到了一些困难。我认为这是一件非常合理的事情,所以我怀疑我的结果存在某种(可能是微不足道的)操作员错误。有什么可以在这里发现或我应该看看的东西吗?尝试创建会话时发生错误:
就我而言,我正在做以下事情:
final ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, serverUrl);
connection = connectionFactory.createQueueConnection();
session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
在服务器端,他们看到以下内容:
11:53:06,428 ERROR [org.hornetq.core.protocol.core.impl.RemotingConnectionImpl] (Old I/O server worker (parentId: 1778858866, [id: 0x6a073b72, -hostname-]))
Failed to decode: java.lang.IllegalArgumentException: Invalid type: 1
at org.hornetq.core.protocol.core.impl.PacketDecoder.decode(PacketDecoder.java:550) [hornetq-core-2.2.13.Final.jar:]
....
【问题讨论】:
【参考方案1】:您不能使用 ActiveMQ 库与 HornetQ 对话。每个都有自己的协议,您需要适当的库才能进行交谈,这是双向的。您不能使用 HornetQ 库与 ActiveMQ 通信。
您可以使用 stomp 与 HornetQ 对话,这是 HornetQ 和 ActiveMQ 之间的通用库。
【讨论】:
有趣。这就是我最初的想法,但双方的团体都认为这听起来很奇怪,因为它应该是一个有线协议标准。我会考虑在我们这边使用 stomp 和/或添加 HornetQ。 同样的方式,你不能使用 ActiveMQ 与 WebSphere MQ 对话......等等。你可能应该接受我的回答 :) 另一种选择是使用 Apache Camel 创建将消息从一个代理转发到另一个代理的路由。 谢谢大家。在其他一些问题之后,我至少能够使用 hornetq jars 与他们的服务器进行通信。我们尝试最小化依赖关系,因此可能会考虑其他选项之一,但至少现在我们知道问题所在了。 JMS != 协议... JMS = 客户端 API 不是线路兼容性... 提供线路兼容性(即协议)的唯一规范是:AMQP、MQT、Stomp.. 可能还有其他规范,但我现在想不起来了。如果您使用 API 实现,它将仅对该特定实现有效。我希望这会有所帮助!以上是关于ActiveMQ 到 HornetQ 导致异常的主要内容,如果未能解决你的问题,请参考以下文章
基于Tomcat + JNDI + ActiveMQ实现JMS的点对点消息传送