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