原文地址:http://www.huaishao8.com/config/activemq/132.html
KahaDB
KahaDB是基于文件的本地?cái)?shù)據(jù)庫(kù)儲(chǔ)存形式,雖然沒(méi)有AMQ的速度快,但是它具有強(qiáng)擴(kuò)展性,恢復(fù)的時(shí)間比AMQ短,從5.4版本之后KahaDB做為默認(rèn)的持久化方式。默認(rèn)配置如下:
<persistenceAdapter>
<kahaDB directory="activemq-data" journalMaxFileLength="32mb"/>
</persistenceAdapter>
KahaDB的屬性:
property name | default value | Comments |
directory | activemq-data | 消息文件和日志的存儲(chǔ)目錄 |
indexWriteBatchSize | 1000 | 一批索引的大小,當(dāng)要更新的索引量到達(dá)這個(gè)值時(shí),更新到消息文件中 |
indexCacheSize | 10000 | 內(nèi)存中,索引的頁(yè)大小 |
enableIndexWriteAsync | false | 索引是否異步寫到消息文件中 |
journalMaxFileLength | 32mb | 一個(gè)消息文件的大小 |
enableJournalDiskSyncs | true | 是否講非事務(wù)的消息同步寫入到磁盤 |
cleanupInterval | 30000 | 清除操作周期,單位ms |
checkpointInterval | 5000 | 索引寫入到消息文件的周期,單位ms |
ignoreMissingJournalfiles | false | 忽略丟失的消息文件,false,當(dāng)丟失了消息文件,啟動(dòng)異常 |
checkForCorruptJournalFiles | false | 檢查消息文件是否損壞,true,檢查發(fā)現(xiàn)損壞會(huì)嘗試修復(fù) |
checksumJournalFiles | false | 產(chǎn)生一個(gè)checksum,以便能夠檢測(cè)journal文件是否損壞。 |
5.4版本之后有效的屬性: | | |
archiveDataLogs | false | 當(dāng)為true時(shí),歸檔的消息文件被移到directoryArchive,而不是直接刪除 |
directoryArchive | null | 存儲(chǔ)被歸檔的消息文件目錄 |
databaseLockedWaitDelay | 10000 | 在使用負(fù)載時(shí),等待獲得文件鎖的延遲時(shí)間,單位ms |
maxAsyncJobs | 10000 | 同個(gè)生產(chǎn)者產(chǎn)生等待寫入的異步消息最大量 |
concurrentStoreAndDispatchTopics | false | 當(dāng)寫入消息的時(shí)候,是否轉(zhuǎn)發(fā)主題消息 |
concurrentStoreAndDispatchQueues | true | 當(dāng)寫入消息的時(shí)候,是否轉(zhuǎn)發(fā)隊(duì)列消息 |
5.6版本之后有效的屬性: | | |
archiveCorruptedIndex | false | 是否歸檔錯(cuò)誤的索引 |
從5.6版本之后,有可能發(fā)布通過(guò)多個(gè)kahadb持久適配器來(lái)實(shí)現(xiàn)分布式目標(biāo)隊(duì)列存儲(chǔ)。什么時(shí)候用呢?如果有一個(gè)快速的生產(chǎn)者和消費(fèi)者,當(dāng)某一個(gè)時(shí)刻生產(chǎn)者發(fā)生了不規(guī)范的消費(fèi),那么有可能產(chǎn)生一條消息被存儲(chǔ)在兩個(gè)消息文件中,同時(shí),有些目標(biāo)隊(duì)列是危險(xiǎn)的并且要求訪問(wèn)磁盤。在這種情況下,你應(yīng)該用通配符來(lái)使用mKahaDB。如果目標(biāo)隊(duì)列是分布的,事務(wù)是可以跨越多個(gè)消息文件的。
每個(gè)KahaDB的實(shí)例都可以配置單獨(dú)的適配器,如果沒(méi)有目標(biāo)隊(duì)列提交給filteredKahaDB,那么意味著對(duì)所有的隊(duì)列有效。如果一個(gè)隊(duì)列沒(méi)有對(duì)應(yīng)的適配器,那么將會(huì)拋出一個(gè)異常。配置如下:
<persistenceAdapter>
<mKahaDB directory="${activemq.base}/data/kahadb">
<filteredPersistenceAdapters>
<!-- match all queues -->
<filteredKahaDB queue=">">
<persistenceAdapter>
<kahaDB journalMaxFileLength="32mb"/>
</persistenceAdapter>
</filteredKahaDB>
<!-- match all destinations -->
<filteredKahaDB>
<persistenceAdapter>
<kahaDB enableJournalDiskSyncs="false"/>
</persistenceAdapter>
</filteredKahaDB>
</filteredPersistenceAdapters>
</mKahaDB>
</persistenceAdapter>
如果filteredKahaDB的perDestination屬性設(shè)置為true,那么匹配的目標(biāo)隊(duì)列將會(huì)得到自己對(duì)應(yīng)的KahaDB實(shí)例。配置如下:
<persistenceAdapter>
<mKahaDB directory="${activemq.base}/data/kahadb">
<filteredPersistenceAdapters>
<!-- kahaDB per destinations -->
<filteredKahaDB perDestination="true" >
<persistenceAdapter>
<kahaDB journalMaxFileLength="32mb" />
</persistenceAdapter>
</filteredKahaDB>
</filteredPersistenceAdapters>
</mKahaDB>
</persistenceAdapter>