ActiveMQ默认的消息持久化方式:
均在 ActiveMQ_HOME/conf/activemq.xml文件中配置实现。
第一种方式
持久化为数据文件方式是ActiveMQ默认使用方式
配置如下:
<persistenceAdapter>
<kahaDBdirectory="${activemq.data}/kahadb"/>
</persistenceAdapter>
第二种方式
通过JDBC将消息持久化到数据库中
配置如下:
<persistenceAdapter>
<jdbcPersistenceAdaptedirectory="${activemq.data}" dataSource="#mysqlDataSource"/>
</persistenceAdapter>
mysqlDataSource数据源配置如下
- <bean id="mysqlDataSource" class="org.apache.commons.dbcp.BasicDataSource"
- destroy-method="close">
- <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
- <property name="url" value="jdbc:mysql://localhost/activemq relaxAutoCommit=true"/>
- <property name="username" value="activemq"/>
- <property name="password" value="activemq"/>
- <property name="poolPreparedStatements" value="true"/>
- </bean>
第三种方式
基于内存的消息存储方式
配置如下:
<broker persistent="false">
<persistenceAdapter>
<jdbcPersistenceAdaptedirectory="${activemq.data}" dataSource="#mysqlDataSource"/>
</persistenceAdapter>
</broker>
ActiveMQ支持一种高效日志方式,具体设置如下:
<persistenceFactory><journalPersistenceAdapterFactory journalLogFiles="5"
dataDirectory="${activemq.base}/data" dataSource="#mysqlDataSource"></journalPersistenceAdapterFactory> </persistenceFactory>
mysqlDataSource数据源配置详见上面配置。
在消息消费者能跟上生产者的速度时,journal文件能大大减少需要写入到DB中的消息。举个例子:生产者产生了10000个消息,这10000个消息会保存到journal文件中,但是消费者的速度很快,在journal文件还未同步到DB之前,以消费了9900个消息。那么后面就只需要写入100个消息到DB了。如果消费者不能跟上生产者的速度,journal文件可以使消息以批量的方式写入DB中,JDBC驱动进行DB写入的优化。从而提升了性能。另外,journal文件支持JMS事务的一致性。
ActiveMQ源码下载地址如下: