我将我的应用程序从
ActiveMQ 5.5.1
迁移到 ActiveMQ 5.8.0
。
我的应用程序在 activemq.xml
文件中具有持久性配置,如下所示:
<persistenceAdapter>
<kahaPersistenceAdapter directory="${activemq.base}/data/msg" maxDataFileLength="20 Mb"/>
</persistenceAdapter>
但是当我启动 activemq 时,我在
wrapper.log
文件中遇到以下异常:
INFO | jvm 1 | 2013/02/24 10:43:28 | Caused by: java.lang.ClassNotFoundException: org.apache.activemq.store.kahadaptor.KahaPersistenceAdapter
INFO | jvm 1 | 2013/02/24 10:43:28 | at java.net.URLClassLoader$1.run(Unknown Source)
INFO | jvm 1 | 2013/02/24 10:43:28 | at java.security.AccessController.doPrivileged(Native Method)
INFO | jvm 1 | 2013/02/24 10:43:28 | at java.net.URLClassLoader.findClass(Unknown Source)
INFO | jvm 1 | 2013/02/24 10:43:28 | at java.lang.ClassLoader.loadClass(Unknown Source)
INFO | jvm 1 | 2013/02/24 10:43:28 | at java.lang.ClassLoader.loadClass(Unknown Source)
INFO | jvm 1 | 2013/02/24 10:43:28 | at org.apache.xbean.spring.context.v2c.XBeanQNameHelper.loadClass(XBeanQNameHelper.java:107)
INFO | jvm 1 | 2013/02/24 10:43:28 | at org.apache.xbean.spring.context.v2c.XBeanQNameHelper.getBeanInfo(XBeanQNameHelper.java:72)
注意:我的应用程序在由
activemq 5.5.1
存储的队列中有消息,并且无法更改持久性配置。
在 v5.8.0 中,依赖关系已被稍微分解,以允许您减少运行 Broker 所需的 jar 数量。 Kaha 适配器位于 activemq-amq-store 组件内,因此如果您想使用它,您需要将其引入您的项目中。
请注意,此适配器已被弃用,并将在 v5.9.0 中消失,因此最好迁移到受支持的适配器之一。 目前默认适配器是 KahaDB,位于 activemq-kahadb-store 中。 您还可以尝试 LevelDB 适配器,它具有更快的索引,但仍然很年轻,可能存在一些问题。
虽然没有迁移工具可以轻松地让您从旧存储迁移到新 KahaDB 存储,但您可以通过使用 KahaDB 设置新代理并使用网络连接器将其连接到旧存储来实现此目的。一旦新代理注册了对您在旧代理的旧存储中拥有消息的目的地的需求,新代理应该耗尽所有消息并将它们存储在 KahaDB 存储中。
AMQ 5.14.2/5.17.0更新
请注意,LevelDB已弃用,ActiveMQ 文档再次建议使用kahaDB