【发布时间】:2014-02-20 02:51:55
【问题描述】:
使用 ActiveMQ 5.9.0,我有以下代理配置:
<amq:broker id="broker" useShutdownHook="false" persistent="true">
<amq:persistenceAdapter>
<amq:jdbcPersistenceAdapter dataSource="#dataSource">
</amq:jdbcPersistenceAdapter>
</amq:persistenceAdapter>
<amq:transportConnectors>
<amq:transportConnector uri="${broker.url}" />
</amq:transportConnectors>
</amq:broker>
如果代理启动时数据库中已经有消息,我会得到异常:
java.lang.ClassCastException: org.apache.activemq.command.WireFormatInfo 无法转换为 org.apache.activemq.command.Message 在 org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.getLastMessageBrokerSequenceId(JDBCPersistenceAdapter.java:265) 在 org.apache.activemq.broker.region.DestinationFactoryImpl.getLastMessageBrokerSequenceId(DestinationFactoryImpl.java:147) 在 org.apache.activemq.broker.region.RegionBroker.(RegionBroker.java:128) 在 org.apache.activemq.broker.jmx.ManagedRegionBroker.(ManagedRegionBroker.java:111) 在 org.apache.activemq.broker.BrokerService.createRegionBroker(BrokerService.java:2172) 在 org.apache.activemq.broker.BrokerService.createRegionBroker(BrokerService.java:2165) 在 org.apache.activemq.broker.BrokerService.createBroker(BrokerService.java:2122) 在 org.apache.activemq.broker.BrokerService.getBroker(BrokerService.java:906) 在 org.apache.activemq.broker.BrokerService.getAdminConnectionContext(BrokerService.java:2393) 在 org.apache.activemq.broker.BrokerService.startVirtualConsumerDestinations(BrokerService.java:2533) 在 org.apache.activemq.broker.BrokerService.startDestinations(BrokerService.java:2384) 在 org.apache.activemq.broker.BrokerService.doStartBroker(BrokerService.java:640) 在 org.apache.activemq.broker.BrokerService.startBroker(BrokerService.java:632) 在 org.apache.activemq.broker.BrokerService.start(BrokerService.java:568) 在 org.apache.activemq.broker.BrokerService.autoStart(BrokerService.java:524) 在 org.apache.activemq.broker.BrokerService.postConstruct(BrokerService.java:511)
在我看来,用于编组消息的格式可能与解组时使用的格式不同。知道为什么会这样吗?
【问题讨论】:
-
消息是从旧版本的 ActiveMQ 生成的吗?
-
@TimBish 不,它是同一个 ActiveMQ 版本。我切换到 5.5.0 版本,现在可以正常使用了。
-
你的架构是什么?
-
@Leo 我在 Oracle 数据库上使用嵌入式 amq。终于知道问题出在哪里了,和我一直用的oracle驱动有关。
-
花哨的错误 :-) 很高兴知道你已经解决了