【问题标题】:Exception when restarting embedded activeMQ broker with jdbcPersistenceAdapter使用 jdbcPersistenceAdapter 重新启动嵌入式 activeMQ 代理时出现异常
【发布时间】: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驱动有关。
  • 花哨的错误 :-) 很高兴知道你已经解决了

标签: java spring activemq


【解决方案1】:

问题出在 oracle 驱动程序版本上。从数据库中读取 blob 列时,数据已损坏。 该问题很难重现(在收到消息时停止应用程序),因此切换到 amq 5.5.0 是误报。我正在使用 ojdbc 10.1.0.2.0 并切换到 ojdbc6 11.2.0.3 解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-16
    • 2012-01-09
    • 2011-05-28
    • 2012-05-13
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    相关资源
    最近更新 更多