ActiveMQ如何定制持久化策略?

ActiveMQ默认采用KahaDB作为持久化存储,但是也允许我们定制持久化策略。
一、基于文件方式持久化
直接将消息持久化到文件中。
配置文件:

<broker> 
   <persistenceAdapter>  
       <fileAdapter database="activemq-data" />  
   </persistenceAdapter>
</broker>

自定义FileAdapter来实现定制化的文件存储逻辑。

二、基于数据库持久化
将消息持久化到数据库中。
配置数据库类型和连接信息:

<broker>
   <persistenceAdapter>
       <jdbcAdapter xmlns="..." 
          dataSource="#mysql-ds" 
          createTablesOnStartup="false" /> 
   </persistenceAdapter>
</broker>

createTablesOnStartup可以指定是否启动时自动创建表。
定制JdbcAdapter的实现。

三、使用NoSQL来持久化
比如基于MongoDB等NoSQL数据库持久化消息。
需要实现PersistenceAdapter接口,并注册于Spring上下文中:

<bean id="mongoPersistenceAdapter" 
   class="com.xyz.MongoPersistenceAdapter"/>

<broker persistenceAdapterRef="mongoPersistenceAdapter"/>

MongoPersistenceAdapter实现MongoDB相关的存储逻辑。

四、基于自定义方式持久化
实现PersistenceAdapter接口:

public class MyPersistenceAdapter implements PersistenceAdapter {
    ... 
}

并在Spring中注入:

<bean id="myPersistenceAdapter" 
   class="com.xyz.MyPersistenceAdapter"/>

<broker persistenceAdapterRef="myPersistenceAdapter"/>  

ActiveMQ可以使用任何实现PersistenceAdapter接口的Class作为持久化策略。

总的来说,ActiveMQ允许我们定制以下持久化策略:

  1. 基于文件存储(需要实现FileAdapter)
  2. 基于数据库存储(配置JdbcAdapter)
  3. 使用NoSQL数据库存储(自定义实现)
  4. 完全自定义实现(实现PersistenceAdapter接口)