Java 1
AMQ的属性:
属性名称
默认值 描述
active
directory mq-dat消息文件和日志的存储目录
a
useNIO true 使用NIO协议存储消息
syncOnWrite false 同步写到磁盘,这个选项对性能影响非常大 maxFileLeng
32mb 一个消息文件的大小
th
persistentI
true 消息索引的持久化,如果为false,那么索引保存在内存中
ndex
maxCheckpoi
ntMessageAd4kb 一个事务允许的最大消息量 dSize
cleanupInte
30000 清除操作周期,单位ms
rval
索引文件缓存页面数,缺省为1024,当amq扩充或者缩减存储时,会锁定整个
indexBinSiz
1024 broker,导致一定时间的阻塞,所以这个值应该调整到比较大,但是代码中实
e
现会动态伸缩,调整效果并不理想。
indexKeySiz
96 索引key的大小,key是消息ID
e
indexPageSi
16kb 索引的页大小
ze
directoryArarchiv
存储被归档的消息文件目录
chive e archiveData
false 当为true时,归档的消息文件被移到directoryArchive,而不是直接删除
Logs
2、KahaDB
KahaDB是基于文件的本地数据库储存形式,虽然没有AMQ的速度快,但是它具有强扩展性,恢复的时间比AMQ短,从5.4版本之后KahaDB做为默认的持久化方式。默认配置如下: Java 1
KahaDB的属性:
default va
Comments
lue
activemq-d
directory 消息文件和日志的存储目录
ata
一批索引的大小,当要更新的索引量到达这个值时,更新
indexWriteBatchSize 1000
到消息文件中
indexCacheSize 10000 内存中,索引的页大小 enableIndexWriteAsync false 索引是否异步写到消息文件中 journalMaxFileLength 32mb 一个消息文件的大小 enableJournalDiskSyncs true 是否讲非事务的消息同步写入到磁盘 cleanupInterval 30000 清除操作周期,单位ms checkpointInterval 5000 索引写入到消息文件的周期,单位ms
忽略丢失的消息文件,false,当丢失了消息文件,启动异
ignoreMissingJournalfiles false
常
checkForCorruptJournalFil
false 检查消息文件是否损坏,true,检查发现损坏会尝试修复
es
checksumJournalFiles false 产生一个checksum,以便能够检测journal文件是否损坏。 5.4版本之后有效的属性:
当为true时,归档的消息文件被移到directoryArchive,
archiveDataLogs false
而不是直接删除
directoryArchive null 存储被归档的消息文件目录 databaseLockedWaitDelay 10000 在使用负载时,等待获得文件锁的延迟时间,单位ms maxAsyncJobs 10000 同个生产者产生等待写入的异步消息最大量 concurrentStoreAndDispatc
false 当写入消息的时候,是否转发主题消息
hTopics
concurrentStoreAndDispatc
true 当写入消息的时候,是否转发队列消息
hQueues property name
5.6版本之后有效的属性: archiveCorruptedIndex false
是否归档错误的索引 从5.6版本之后,有可能发布通过多个kahadb持久适配器来实现分布式目标队列存储。什么时候用呢?如果有一个快速的生产者和消费者,当某一个时刻生产者发生了不规范的消费,那么有可能产生一条消息被存储在两个消息文件中,同时,有些目标队列是危险的并且要求访问磁盘。在这种情况下,你应该用通配符来使用mKahaDB。如果目标队列是分布的,事务是可以跨越多个消息文件的。 每个KahaDB的实例都可以配置单独的适配器,如果没有目标队列提交给filteredKahaDB,那么意味着对所有的队列有效。如果一个队列没有对应的适配器,那么将会抛出一个异常。配置如下: Java 1
7
如果filteredKahaDB的perDestination属性设置为true,那么匹配的目标队列将会得到自己对应的KahaDB实例。配置如下: Java 1
4
5
7
alse\3 dataSource指定持久化数据库的bean,createTablesOnStartup是否在启动的时候创建数据表,默认值是true,这样每次启动都会去创建数据表了,一般是第一次启动的时候设置为true,之后改成false。 MYSQL持久化bean