5.3 AMQ消息存储-The AMQ message store



    AMQ消息存储和KahaDB相似,具备保障可靠持久化的事务日志以及搞性能索引,于是当消息吞吐量是主要需求时,应用程序使用这种消息存储是最好的选择.可是由于AMQ消息存储中每一个索引都使用
连个文件,并且为每个消息目的地都单独使用索引,因此当每一个代理中会产生大量的消息队列是不该该使用AMQ消息存储.一样,使用这种消息存储代理从非正常关闭中恢复会比较慢.缘由是代理
恢复时,全部的的索引须要重建,这就要求代理遍历它的数据日志文件以便正确的重建索引.

5.3.1 深刻AMQ消息存储
    
    AMQ消息的存储的主要组成部分和KahaDB消息存储相似,包括缓存,以及用于按顺序存取消息数据日志文件
的引用.AMQ消息存储包含一下三个独立部分:

数据日志文件 — 该文件保存消息引用,这些消息已根据消息ID创建了索引
缓存 — 在消息被写入数据日志文件后,缓存是在内存中保存这些消息以便快速读取这些消息
引用存储 — 引用存储是掉数据日志中消息的引用,这些消息已经根据消息ID创建了索引


5.3.2 AMQ消息存储的目录结构
    
    当你启动一个配置了AMQ的ActiveMQ代理,一个用于保存持久化消息的目录会被自动建立.AMQ消息存储目录包含了一些子目录,每个子目录对应一个在本机上运行的代理.所以,建议
给不一样的代理取不一样的名称.ActiveMQ的默认配置中,broker的name属性为localhost,这个须要
修改为一个惟一值.

目录结构
lock文件 — 保证任什么时候刻只有一个代理能够存取这个数据.lock一般用于双击人备份环境,此时系统中可能
temp文件存储目录 — 用于存储不能在代理的内存中驻留的非持久化信息.这些消正在等待被发送到速度较慢的消息消费者.
kr-store目录 — 改目录用于AMQ消息存储的引用(索引)部分.默认时使用Kaha引用存储(Kaha是ActiveMQ核心库的一部分),以创建数据
日志文件中消息索引的引用.kr-store包含一下两个独立部分:
数据日志目录 — 数据文件(保存数据日志)和数据控制文件(保存一些元数据信息).数据文件会被引用计数,所以当文件中包含的全部消息
都被分发了时,改数据文件会被删除或归档.
归档目录 —  只有启用归档时才产生归档目录.默认状况下,归档目录和数据日志目录同级(即和journal目录在一块儿).
归档目录应该放到其余系统分区或者磁盘上(不要与journal放在一块儿).归档文件用来保存journal中再也不使用的
数据日志文件(若是不归档的话,这些数据日志文件原本应该会被删除).这样就能够在之后重播已经处理过的消息.
要重播消息,能够移动归档后的数据日志文件(或该文件的一部分)到一个新的journal目录,而后启动一个指向
这个新journal目录的代理,而后这个新启动的代理会自动重播这个journal中的消息


MQ的基础内已经介绍完毕,接下来看看如何配置AMQ消息存储.
5.3.3 配置AMQ消息存储
经过配置AMQ消息存储,用户能够修改它的基本行为,包括索引创建,执行checkpoint的时间间隔和日志数据文件大小.
这些条目还有其余不少条目均可以经过属性自定义.AMQ消息存储的主要属性如表5.2所示:
属性名称              默认值                   描述
directory           activemq-data           AMQ消息存储使用的目录
useNIO              true                    JDK的NIO能够更快的写入文件到系统磁盘
syncOnWrite         false                   是否同步全部的磁盘写操做
syncOnTransaction   true                    是否同步全部的事务写操做
maxFileLength       32mb                    日志数据文件的最大尺寸,超过这个值将建立一个新文件
persistentIndex     true                    是否使用持久化索引.若是设置为false,将使用内存中的HashMap做为替代.
maxCheckpointMessageAddSize   4kb           单个事务可以使用的最大内存大小,超过这个值数据会被写入磁盘
cleanupInterval     3000(ms)                进行日志数据文件是否须要的检查操做 的时间间隔(不须要的数据日志文件会被删除或归档(配置了归档时))
checkpointInterval  20000(ms)               checkpoint的时间间隔,缓存的消息ID在内存中存在的时间,超过这个时间缓存被写入索引文件
indexBinSize        1024                    用于索引的哈希容器的初始化大小
indexMaxBinSize     16384                   哈希容器容量的最大值
directoryArchive    archive                 归档目录,AMQ消息存储用来存放归档文件的地方
archiveDataLogs     false                   是否启用归档.若启用,不用的日志文件会被移动到规定目录,而不是删除掉.
recoverReferenceStore       true                若是代理非正常关闭,是否恢复索引存储. 这个选项须要谨慎配置
forceRecoverReferenceStore  false               Forces a recovery of the reference store.
下面是使用表5.2中列出的属性,配置ActiveMQ的XML代码示例:

 

<?xml version=”1.0″ encoding=”UTF-8″?>

<beans>

<broker xmlns=”http://activemq.apache.org/schema/core”>

<persistenceAdapter>

<amqPersistenceAdapter

directory=”target/Broker2-data/activemq-data”

syncOnWrite=”true”

indexPageSize=”16kb”

indexMaxBinSize=”100″

maxFileLength=”10mb” />

</persistenceAdapter>

</broker>

</beans>

 
与KahaDB同样,AMQ消息存储也容许用户快速使用,由于这种消息存储方式不须要

依赖外部的其余数据库.可是,假如你想使用已有的关系数据库来运行ActiveMQ代理,你须要

使用JDBC消息存储.


 






数据库

相关文章
相关标签/搜索