持久化存儲支持類型
- KahaDB存儲(默認存儲方式)
- JDBC存儲 Memory存儲
- LevelDB存儲
- JDBC With ActiveMQ Journal
正常情況下,非持久化消息是存儲在內存中的,持久化消息是存儲在文件中的。能夠存儲的最大消息數據在
${ActiveMQ_HOME}/conf/activemq.xml文件中的systemUsage節點
SystemUsage配置設置了一些系統內存和硬盤容量
activemq.xml
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage percentOfJvmHeap="70" />
</memoryUsage>
<storeUsage>
<storeUsage limit="100 gb"/>
</storeUsage>
<tempUsage>
<tempUsage limit="50 gb"/>
</tempUsage>
</systemUsage>
</systemUsage>
mysql持久化
第一步:註釋調kahadb,添加mysql配置
<persistenceAdapter>
<!-- <kahaDB directory="${activemq.data}/kahadb"/> -->
<jdbcPersistenceAdapter dataSource="#mysql-ds" createTablesOnStartup="true" />
</persistenceAdapter>
第二步:添加mysql數據源配置的bean
<bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/activemq?relaxAutoCommit=true"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
第三步:在activemq更目錄的\lib目錄下添加以下3個jar包
數據庫連接池:commons-dbcp-1.4.jar、commons-pool-1.6.jar
mysql JDBC驅動包:mysql-connector-java-5.1.35.jar
第四步:新建數據庫activemq並重啓activemq
重啓後會自動創建3個表:
activemq_msgs 消息表,queue和topic都存在這個表中
activemq_acks 存儲持久訂閱的信息和最後一個持久訂閱接收的消息ID
activemq_locks 鎖表,用來確保某一時刻,只能有一個ActiveMQ broker實例來訪問數據庫
之後發送一個持久化消息不消費掉可以看到數據庫表中有數據了
JDBC Message store with ActiveMQ Journal
ActiveMQ Journal,使用高速緩存寫入技術,大大提高了性能
journal文件能夠大大減少需要寫入到DB中的消息
如果消費者的消費速度很慢,這個時候journal文件可以使消息以批量方式寫到DB
配置好mysql後把persistenceAdapter註釋掉添加persistenceFactory即可使用Journal
<!--
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
<jdbcPersistenceAdapter dataSource="#mysql-ds" createTablesOnStartup="true" />
</persistenceAdapter>
-->
<persistenceFactory>
<journalPersistenceAdapterFactory dataSource="#mysql-ds" dataDirectory="activemq-data"/>
</persistenceFactory>