使用activemq-client jar和activemq-all jar的问题

时间:2019-06-17 14:04:15

标签: java jms activemq

我需要使用activemq-client而不是汇总activemq-all JAR文件,因为汇总全部包含我们使用的其他库的不同版本。

我正在使用maven来管理依赖项,客户端jar会插入:

  • activemq-client(5.15.8)
  • slf4j-api 1.7.25
  • geronimo-jms_1.1_spec(1.1.1)
  • hawtbuf(1.11)
  • geronimo-j2ee-management_1.1_spec(1.0.1)

所有jar都只是activemq-all(5.15.8)

使用这个代码,通过activemq-all jar,我可以连接并开始接收消息。在createConnection()呼叫中,我收到一条日志消息“已成功连接到...”

使用activemq-client jar,它挂在createSession()调用上(并输出“ 10次尝试失败,将继续尝试”的消息)。我收到“已成功连接到...”消息。

ConnectionFactory factory = new ActiveMQConnectionFactory(user, pass, url);
Connection AMQconn =  factory.createConnection();
Session AMQsess =  AMQconn.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = AMQsess.createQueue(queueName);
MessageConsumer AMQconsumer = AMQsess.createConsumer(queue);

我假设我在某处缺少依赖项,但是没有收到no class def found异常等。

(我还使用了activemq版本5.15.9,但是我们的服务器是5.15.8,因此请坚持使用)。

更大的图景(为什么客户端jar与汇总jar):我需要在相同的过程中连接到hornetQ和AMQ,并且分解单个jar是我尝试修复内部版本冲突的东西易拉罐)

1 个答案:

答案 0 :(得分:1)

该问题省略了URI,但注释似乎表明用户正在尝试通过以下形式的URI进行连接:auto://localhost:61616。鉴于自动传输在客户端没有意义,因为这将在代理端自动自动检测到正在使用的协议并切换到该协议的,因此这将是一个问题。自动。自动传输允许代理在客户端将连接到的单个开放端口上支持多种协议。

ActiveMQ JMS客户端必须始终使用Openwire协议(这是它要做的事情),因此客户端的URI的格式应为tcp://ssl://或{{1 }}等

如果您包含ActiveMQ代理jar,它将提供一些特殊的便利类,它们将仅映射URI,这些URI包括在客户端中没有意义的方案,例如 nio nio + ssl auto ,但它们不属于客户端jar,因为它们实际上不属于客户端,因为它们确实不属于该容器。