2、KahaDB
KahaDB是基于文件的本地数据库储存形式,虽然没有AMQ的速度快,但是它具有强扩展性,恢复的时间比AMQ短,从5.4版本之后KahaDB做为默认的持久化方式。默认配置如下:
<persistenceAdapter> <kahaDB directory="activemq-data" journalMaxFileLength="32mb"/> </persistenceAdapter>
1
2
3
|
<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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<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实例。配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
|
<persistenceAdapter>
<
mKahaDB
directory
=
"${activemq.base}/data/kahadb"
>
<filteredPersistenceAdapters>
<
!
--
kahaDB
per
destinations
--
>
<
filteredKahaDB
perDestination
=
"true"
>
<persistenceAdapter>
<
kahaDB
journalMaxFileLength
=
"32mb"
/
>
<
/
persistenceAdapter
>
<
/
filteredKahaDB
>
<
/
filteredPersistenceAdapters
>
<
/
mKahaDB
>
<
/
persistenceAdapter
>
|