我使用ActiveMQ已经有一段时间了。由于我在 Tomcat 服务器中的 Web 应用程序之间进行通信,因此我在 Tomcat 的
conf
中定义了一些队列,并在 tomcat/lib
中拥有所有库,但我的应用程序使用 Spring,更具体地说,是 spring-jms 和 activemq-spring 库。
如果我将
activemq-all-5.11.1.jar
放入 lib
中,那么一切正常,但如果我只是放入单独的罐子(经纪人、客户端、控制台、kahadb、protobuf 和 spring),我会收到以下错误:
javax.jms.JMSException: Could not create Transport. Reason: java.io.IOException: Invalid version: 6, could not load org.apache.activemq.openwire.v6.MarshallerFactory
at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:36) ~[activemq-client-5.11.1.jar:5.11.1]
at org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:319) ~[activemq-client-5.11.1.jar:5.11.1]
at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:332) ~[activemq-client-5.11.1.jar:5.11.1]
at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:305) ~[activemq-client-5.11.1.jar:5.11.1]
at org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:245) ~[activemq-client-5.11.1.jar:5.11.1]
at org.springframework.jms.connection.SingleConnectionFactory.doCreateConnection(SingleConnectionFactory.java:365) ~[spring-jms-4.1.6.RELEASE.jar:4.1.6.RELEASE]
我检查了“v6.MarshallerFactory”类,它似乎与与旧版本的经纪人交谈有关。但是我的代理在 Tomcat 中运行,而我拥有的唯一 ActiveMQ jar 是 Tomcat 库中的那些,所以我不明白为什么有人认为需要与旧版本的代理进行通信。
您需要包含旧版 OpenWire 模块才能支持与旧代理版本的通信,如果您在项目中包含此依赖项,它应该可以工作。