【问题标题】:Problems using activemq-client jar vs activemq-all jar使用 activemq-client jar 与 activemq-all jar 的问题
【发布时间】:2019-06-17 14:04:15
【问题描述】:

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

我正在使用maven管理依赖,客户端jar拉进来:

  • activemq 客户端 (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)

all 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 是我尝试修复冲突版本的东西易拉罐)

【问题讨论】:

  • 尝试捕获日志并发布有关连接尝试的内容,否则很难猜测发生了什么
  • 好建议,提姆比什,我觉得自己没有想到这一点很愚蠢。谢谢你。 activemq-client 不喜欢连接字符串中的“auto”,但喜欢“tcp”。 activemq-all 可以处理“自动”。我在文档中找不到任何关于此的内容(除了 5.13 引入的“自动”)。这是一个 amq 错误,还是我的错误配置?
  • 解决方案是什么?

标签: java jms activemq


【解决方案1】:

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

ActiveMQ JMS 客户端必须始终使用 Openwire 协议(这就是它的构建目的),因此客户端的 URI 将采用 tcp://ssl://failover:// 等形式。

如果您包含 ActiveMQ 代理 jar,则会启动一些特殊的便利类,它只会映射包含在客户端中没有意义的方案的 URI,例如 nionio +sslauto 但它们不包含在仅限客户端的 jar 中,因为它们实际上不属于那里,因为它们不适合在客户端使用。

【讨论】:

  • 感谢您的解释。服务器团队说,“嘿,用这个字符串连接”。似乎这是来自他们用于单元测试的骆驼/保险丝配置,但如果他们使用的是activemq-all,那么它对他们“只是工作”。 (它是“故障转移:(tcp://server1:61616,tcp://server2:61616,...”加上很多其他参数)
猜你喜欢
  • 2012-07-31
  • 1970-01-01
  • 2013-10-20
  • 2014-10-29
  • 2016-09-24
  • 2013-12-28
  • 2019-09-14
  • 2019-03-12
  • 1970-01-01
相关资源
最近更新 更多