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