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消息存储.


 






转载于:https://my.oschina.net/goudingcheng/blog/631367

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值