ActiveMQ使用笔记(二)ActiveMQ消息持久化(2)

来源:互联网 发布:风暴大陆进阶数据 编辑:程序博客网 时间:2024/05/16 12:55

2、KahaDB

KahaDB是基于文件的本地数据库储存形式,虽然没有AMQ的速度快,但是它具有强扩展性,恢复的时间比AMQ短,从5.4版本之后KahaDB做为默认的持久化方式。默认配置如下:

KahaDB的属性:

property namedefault valueCommentsdirectoryactivemq-data消息文件和日志的存储目录indexWriteBatchSize1000一批索引的大小,当要更新的索引量到达这个值时,更新到消息文件中indexCacheSize10000内存中,索引的页大小enableIndexWriteAsyncfalse索引是否异步写到消息文件中journalMaxFileLength32mb一个消息文件的大小enableJournalDiskSyncstrue是否讲非事务的消息同步写入到磁盘cleanupInterval30000清除操作周期,单位mscheckpointInterval5000索引写入到消息文件的周期,单位msignoreMissingJournalfilesfalse忽略丢失的消息文件,false,当丢失了消息文件,启动异常checkForCorruptJournalFilesfalse检查消息文件是否损坏,true,检查发现损坏会尝试修复checksumJournalFilesfalse产生一个checksum,以便能够检测journal文件是否损坏。5.4版本之后有效的属性:  archiveDataLogsfalse当为true时,归档的消息文件被移到directoryArchive,而不是直接删除directoryArchivenull存储被归档的消息文件目录databaseLockedWaitDelay10000在使用负载时,等待获得文件锁的延迟时间,单位msmaxAsyncJobs10000同个生产者产生等待写入的异步消息最大量concurrentStoreAndDispatchTopicsfalse当写入消息的时候,是否转发主题消息concurrentStoreAndDispatchQueuestrue当写入消息的时候,是否转发队列消息5.6版本之后有效的属性:  archiveCorruptedIndexfalse是否归档错误的索引

从5.6版本之后,有可能发布通过多个kahadb持久适配器来实现分布式目标队列存储。什么时候用呢?如果有一个快速的生产者和消费者,当某一个时刻生产者发生了不规范的消费,那么有可能产生一条消息被存储在两个消息文件中,同时,有些目标队列是危险的并且要求访问磁盘。在这种情况下,你应该用通配符来使用mKahaDB。如果目标队列是分布的,事务是可以跨越多个消息文件的。

每个KahaDB的实例都可以配置单独的适配器,如果没有目标队列提交给filteredKahaDB,那么意味着对所有的队列有效。如果一个队列没有对应的适配器,那么将会抛出一个异常。配置如下:

如果filteredKahaDB的perDestination属性设置为true,那么匹配的目标队列将会得到自己对应的KahaDB实例。配置如下: