从activemq连接工厂创建连接时Activemq在启动时失败

Posted

技术标签:

【中文标题】从activemq连接工厂创建连接时Activemq在启动时失败【英文标题】:Activemq is failing at startup while creating connection from activemq connection factory 【发布时间】:2018-06-11 06:21:50 【问题描述】:

在我们的应用程序中,我们使用下面的纯 java 代码创建队列,但有时会因为以下错误而失败。

我知道它失败的原因是 jar,但我已经放置了所有最新的 jar,但它仍然失败。现在我不知道该怎么办?

Activemq 启动代码

            qconFactory = new ActiveMQConnectionFactory("My.Queue");        

            qcon = qconFactory.createConnection(); //error occurs here

            session = qcon.createSession(false, Session.AUTO_ACKNOWLEDGE);

            destination = session.createQueue(QUEUE_NAME);  

            producer = session.createProducer(destination);

            consumer = session.createConsumer(destination);

            msg = session.createTextMessage();

            consumer.setMessageListener(new ImportMessageDrivenBean());
            qcon.start();

错误

javax.jms.JMSException: Could not create Transport. Reason: java.lang.RuntimeException: Fatally failed to create SystemUsageInvalid version: 11, org.apache.activemq.openwire.v11.MarshallerFactory does not properly implement the createMarshallerMap method.

使用的 JAR

activemq-broker-5.15.4.jar

activemq-client-5.15.4.jar

activemq-jaas-5.15.4.jar

activemq-kahadb-store-5.15.4.jar

activemq-openwire-legacy-5.15.4.jar

activemq-protobuf-1.1.jar

geronimo-j2ee-management_1.1_spec-1.0.1.jar

geronimo-jms_1.1_spec-1.1.1.jar

geronimo-jta_1.0.1B_spec-1.0.1.jar

slf4j-api-1.7.25.jar

【问题讨论】:

【参考方案1】:

如果您使用的库之一是使用比您运行它的版本更新的 JDK 版本构建的,您将收到此错误。由于该信息不在问题中,因此很难确定是哪一个。我会检查您的 JDK 是否与您正在使用的所有库的所需版本匹配。

ActiveMQ 的 5.15.x 版本需要 JDK 8,所以我猜你正在尝试在 JDK 7 或更早版本上运行它

【讨论】:

感谢蒂姆,但我们只使用 jdk8。虽然这些 jar 在较低的 jdk 版本中不起作用 您的问题是您使用了错误的 JDK 版本,或者您正在混合不同版本的 ActiveMQ jar,您需要自己弄清楚,因为只有您拥有这种访问权限跨度> 【参考方案2】:

有几个可用的 ActiveMQConnectionFactory ctor。在没有起草完整的书信的情况下,我使用以下内容:

String bindAddress = "failover:tcp://localhost:61616"; // failover promotes resilience URI uRI = new URI(bindAddress); ConnectionFactory factory = new ActiveMQConnectionFactory(uRI); // note the more general ConnectionFactory

绑定地址指定传输、主机(或 IP 地址)和端口。 您可以将“tcp://localhost:61616”的绑定地址传递给 ctor 的 String 版本。

【讨论】:

以上是关于从activemq连接工厂创建连接时Activemq在启动时失败的主要内容,如果未能解决你的问题,请参考以下文章

学习ActiveMQ:spring与ActiveMQ整合

activeMq与spring整合

Spring与ActiveMQ整合

activeMQ学习---------点对点发布订阅的消息代码实现

从入门到精通的ActiveMQ

ActiveMQ发送消息