为啥 ActiveMQ 5.14.x 无法开始嵌入 camel-jms 组件 2.18.3

Posted

技术标签:

【中文标题】为啥 ActiveMQ 5.14.x 无法开始嵌入 camel-jms 组件 2.18.3【英文标题】:Why ActiveMQ 5.14.x can't start embedded with camel-jms component 2.18.3为什么 ActiveMQ 5.14.x 无法开始嵌入 camel-jms 组件 2.18.3 【发布时间】:2017-09-19 01:04:46 【问题描述】:

这里是简单的spring boot项目(版本1.5.2)来演示问题:

https://github.com/lanwen/camel-jms-activemq-test

它有 Apache Camel 版本 2.18.3

master 分支上,由于activemq-camel=5.14.4camel-jms=2.16.3(从中传递),一切正常

Spring boot 应用正常启动,带日志:

2017-04-22 00:53:19.647  INFO 97217 --- [           main] o.a.camel.spring.SpringCamelContext      : Apache Camel 2.18.3 (CamelContext: camel-1) is starting
2017-04-22 00:53:19.662  INFO 97173 --- [           main] o.apache.activemq.broker.BrokerService   : Apache ActiveMQ 5.14.4 (localhost, ID:lanwen-osx3.local-62145-1492811599544-0:1) is starting
2017-04-22 00:53:19.665  INFO 97173 --- [           main] o.apache.activemq.broker.BrokerService   : Apache ActiveMQ 5.14.4 (localhost, ID:lanwen-osx3.local-62145-1492811599544-0:1) started
2017-04-22 00:53:19.665  INFO 97173 --- [           main] o.apache.activemq.broker.BrokerService   : For help or more information please see: http://activemq.apache.org
2017-04-22 00:53:19.682  INFO 97173 --- [           main] o.a.activemq.broker.TransportConnector   : Connector vm://localhost started
2017-04-22 00:53:19.702  INFO 97173 --- [           main] o.a.camel.spring.SpringCamelContext      : Route: route1 started and consuming from: activemq://queue:to-write?asyncConsumer=true
2017-04-22 00:53:19.703  INFO 97173 --- [           main] o.a.camel.spring.SpringCamelContext      : Total 1 routes, of which 1 are started.
2017-04-22 00:53:19.704  INFO 97173 --- [           main] o.a.camel.spring.SpringCamelContext      : Apache Camel 2.18.3 (CamelContext: camel-1) started in 0.466 seconds
2017-04-22 00:53:19.709  INFO 97173 --- [           main] ru.yandex.test.writer.MyTestApplication  : Started MyTestApplication in 2.437 seconds (JVM running for 2.911)

但是当你从camel-jms=2.18.3开始时(作为camel的主要版本,在分支not_working上)

这个日志出了点问题:

2017-04-22 00:56:38.070  INFO 97195 --- [           main] o.a.camel.spring.SpringCamelContext      : Apache Camel 2.18.3 (CamelContext: camel-1) is starting
...
2017-04-22 00:56:43.590  WARN 97195 --- [ActiveMQ Task-1] o.a.a.t.failover.FailoverTransport       : Failed to connect to [tcp://localhost:61616] after: 10 attempt(s) continuing to retry.

但如果我们将activemq-camel 更改为5.13.4camel-jms=2.18.3,它会再次正常工作...

为什么 ActiveMQ 5.14.x 不适用于 camel-jms 2.18.x

【问题讨论】:

我有一个 camel-version=2.18.0 和 activeMQ-version=5.14.1 的项目,它工作正常。可以添加更多的痕迹吗? 您尝试过示例项目吗? github.com/lanwen/camel-jms-activemq-test。另请检查您的 camel-jms 版本是否不是 2.16.x 【参考方案1】:

如果您查看最新的 Camel ActiveMQ 1.15.5 (https://mvnrepository.com/artifact/org.apache.activemq/activemq-camel/5.14.5) 的依赖项列表,您会发现它已经有 camel-jms 作为依赖项,但版本是 1.16.3。所以你不需要在你的POM中单独添加一个camel-jms1.18.x依赖,因为它会覆盖ActiveMQ已经使用的1.16.x版本,这是兼容的。

所以本质上,问题在于您正在尝试使用更新的、不兼容的camel-jms 版本。当你单独添加1.18.x camel-jms 依赖时,ActiveMQ 组件将使用这个版本,它与它的1.16.x 版本不兼容,因此,错误。

如果您需要使用 ActiveMQ,那么您可能需要查看 camel-jms 1.16.x 是否适合您。

【讨论】:

当然,我知道它有这个版本的依赖。但问题是默认情况下它不起作用,您只需使用骆驼 bom 或/和 spring-boot bom。问题是为什么它不能完全在这种版本组合中工作,并且仍然可以与另一个版本一起工作

以上是关于为啥 ActiveMQ 5.14.x 无法开始嵌入 camel-jms 组件 2.18.3的主要内容,如果未能解决你的问题,请参考以下文章

为啥我无法编辑嵌入了导航控制器的导航栏?

为啥我的 Flapdoodle 嵌入式 MongoDB 测试无法运行? (创建 'embeddedMongoServer' 无法启动进程 EOF)

Groovy ActiveMQ 5.8嵌入式代理

为啥activemq有两个端口

如何使用 Spring Boot 配置嵌入式 ActiveMQ 代理 URL

如何在 ActiveMq 嵌入式代理上启用 Web 控制台