ActiveMQ 消息持久化存储方式
1.kahaDB 默认持久化的方式(通过文件共享的方式实现集群)
2.JDBC存储
3.Memory内在
4.LevelDb 性能高于kahaDB
5.JDBC with ActiveMQ journal
(1)kahaDB
KahaDB是目前默认的存储方式,可用于任何场景,提高了性能和恢复能力。消息存储使用一个事务日志和仅仅用一个索引文件来存储它所有的地址。
KahaDB是一个专门针对消息持久化的解决方案,它对典型的消息使用模式进行了优化。在kaha中,数据被追加到 data logs中。 当不再需要log文件中的数据的时候,log文件会被丢弃。
KahaDB基本配置如下:
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
(2)mysql存储
<persistenceAdapter>
<!--存储到mysql持久化方式-->
<jdbcPersistenceAdapter dataSource="#my-ds" />
</persistenceAdapter>
<!-- 配置存储方式-mysql配置mysql数据源-->
<bean id="my-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://192.168.1.129:3306/activemq?characterEncoding=utf-8" />
<property name="username" value="arcln" />
<property name="password" value="123456" />
</bean>
导入三个jar包放到 ./lib/目录下
commons-dbcp-1.4.jar
commons-pool-1.5.7.jar
mysql-connector-java-5.1.8.jar
配置好后,重启
# sh activemq start
在数据库中为自动添加三个表
activemq_msgs 消息内容,发送后会添加相应记录,消费完后会自动删除
activemq_acks 存储持久订阅的消息
activemq_lock 锁表
(3) JDBC with ActiveMQ journal
这种方式克服了JDBC Store的不足,使用快速的缓存写入技术,大大提高了性能。
<beans>
<broker brokerName="test-broker" xmlns="http://activemq.apache.org/schema/core">
<persistenceFactory>
<journalPersistenceAdapterFactory journalLogFiles="4" journalLogFileSize="32768"
useJournal="true" useQuickJournal="true" dataSource="#mysql_ds" dataDirectory="activemq-data">
</persistenceFactory>
</broker>
</beans>
JDBC存储和JDBC with ActiveMQ journal的区别:
1. JDBC with journal的性能优于jdbc
2. JDBC用于master/slave模式的数据库分享
3. JDBC with journal不能用于master/slave模式
4. 一般情况下,推荐使用jdbc with journal