avtiveMQ系列-activeMQ持久化

引言

ActiveMQ在不提供持久化的情況下,數據保存在內存中,一旦應用崩潰或者重啓之後,數據都將會丟失,這顯然在大部分情況下是我們所不希望的。對此ActiveMQ提供了兩種持久化方式以供選擇。

一、kahaDB

kahaDB是一個基於文件,支持事務的、可靠,高性能,可擴展的消息存儲器,目前是activeMQ默認的持久化方式,配置也十分簡單

<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>

以上配置是將存儲目錄設置爲${activemq.data}/kahadb,到存儲目錄下查看會發現以下文件

  • db.data
    索引文件,本質上是BTree的實現,存儲到了db-*.log消息文件的索引。
  • db.redo
    用來進行數據恢復的redo文件
  • db-*.log
    存儲消息內容的文件,包括消息元數據、訂閱關係、事務等數據。
  • lock

kahaDB配置支持的參數有:

  • indexWriteBatchSize
    默認值1000,當緩存中更新的索引到達1000時,將數據同步到磁盤中,數據是批量同步的。
  • indexCacheSize
    默認值10000,在內存中最多分配多個頁面來緩存索引。緩存的索引越多,命中的概率就越大,檢索的效率就越高
  • journalMaxFileLength
    默認值32MB,配置單個消息文件的大小,超過一定大小以後重新創建一個新的文件進行保存。
  • enableJournalDiskSyncs
    默認值true,表示採用同步寫磁盤,即消息先存儲到磁盤後再向Producer返回ACK
  • cleanupInterval
    默認值30s,當消息被消息者成功消費之後,Broker就可以將消息刪除的時間間隔。
  • checkpointInterval
    默認值5s,每隔5s將內存中的index緩存更新到磁盤文件中。

Database

除了kahaDB外,activeMQ還支持將數據持久化到數據庫中,配置也十分簡單,在conf/activemq.xml中增加如下配置:

<persistenceAdapter>
<jdbcPersistenceAdapter dataDirectory="${activemq.base}/data" dataSource="#mysql-ds"/>
</persistenceAdapter>

<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/activemq?relaxAutoCommit=true"/>
<property name="username" value="root"/>
<property name="password" value=""/>
<property name="maxActive" value="200"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章