5.3AMQ消息仓库

AMQ消息仓库,像KahaDB一样,是一个可靠持久化事务性日报(为了幸存于系统崩溃)和高性能索引的组合,它是当消息生产量是应用的主要需求的时候的最佳选择。但是因为它为每个索引使用两个独立的文件,并且每个目标有一个索引,所以当你打算为每个代理使用成千上万的队列,AMQ消息仓库不应该被使用。同时,如果ActiveMQ代理关闭得不干净,恢复可能会很慢。这是所有的索引需要被重建,它们需要代理遍历所有的数据日志来准确地再次建立索引。在下一节,我们会清晰地解析类似于KahaDB组件的AMQ消息仓库的内部构件。
5.3.1AMQ消息仓库内部构件
AMQ消息仓库的主要组件和KahaDB消息仓库类似,包括缓存,消息数据日志和为了进入数据日志的引用仓库。图5.5提供了一个AMQ消息仓库的顶层图。
这个图提供了AMQ消息仓库三个独特部分的视图:
●消息数据日志--作为消息日报
●缓存--当消息被存到数据日之后为了快速检索它在内存中保持消息。
●索引仓库--它保存着日志中的消息的索引,消息以他们的消息ID被编入索引。
理解ActiveMQ消息仓库使用的基于文件的目录结构是重要的。它有助于配置和鉴别使用ActiveMQ时的问题。
5.3.2AMQ消息仓库目录结构
当你启动一个配置了AMQ消息仓库的ActiveMQ,一个用于保存持久化消息的目录会被自动创建。AMQ消息仓库日志包含了为所有运行于机器的代理准备的子目录。因为这个原因,强烈建议每个代理使用一个独一无二的名字。在ActiveMQ的默认配置中,代理名是localhost,它需要被改成其他独一无二的名字。目录结构在图5.6展示--AMQ目录结构。
接下来的目录和文件能一个ActiveMQ代理的数据目录内找到:
●一个lock文件--确保同一时间只有一个代理能够存取这个数据。
●一个temp-storage 目录--被用来存储那些不再能被存储在代理内存中的非持久化消息。这些消息通常等待发送到一个缓慢的消费者。
●kr-store--这个目录结构被用于AMQ消息仓库的索引部分。它默认使用Kaha索引仓库(Kaha是ActiveMQ核心库的一部分)来编写索引和存储数据日志中的消息的索引。kr-store 有两个不同的部分:
* 数据目录--包含了为索引存储于数据日志中的消息的索引和集合。如果代理没有被干净地关掉,这个数据目录作为数据恢复的一部分被删除和重建。在启动代理之前你能通过手动删除这个目录强制恢复。
*状态目录--保存关于持久主题消费者的信息。日志本身不保存消费者的信息,所以当它被恢复的时候它不得不首先检索持久化订阅者来准确地重建它的数据库。
●日志目录--问数据日志包含日志文件,和一个保存元标签信息的数据控制文件。
●归档目录--仅当归档被激活的时候可用。它的默认位置能在日志旁找到。它可以用一个单独的位置或磁盘,归档是用来从 日报目录存储数据日志的,这里日志被转移而不是删除。这使以后从归档重发消息成为可能。为了重发消息,移动归档数据日志(或者子集)到一个新的日报目录并启动一个指向这个目录位置的新代理。它将自动重发位于日报中的数据日志。
现在AMQ消息仓库的基础知识已被讨论,下一步是看它的配置。
5.3.3配置AMQ消息仓库
AMQ仓库配置允许用户修改它的关于索引基础,检查点间隔和日报数据文件的大小的基础行为。这些项目和更多的配置能通过使用属性来自定义。AMQ仓库的关键属性在下表中展现:
[table]
|属性名|默认值|描述信息|
|directory|activemq-data|被AMQ消息仓库使用的目录路径|
|useNIO|true|NIO提供到系统磁盘上更快速的连写通|
|syncOnWrite|false|每一次写操作都同步到磁盘|
|syncOnTransaction|true|每个事务同步到磁盘|
|maxFileLength|32mb|在使用新文件以前消息日报数据文件的最大大小|
|persistentIndex|true|持久化索引被使用,如果设为false,一个内存内部哈希图被使用|
|maxCheckpointMessageAddSize|4kb|在写到磁盘之前为一个事务使用的最大内存|
|cleanupInterval|3000(ms)|在检查哪个日报数据文件还在被使用前的延时|
|checkpointInterval|20000(ms)|在移动缓存消息ID到引用仓库索引前的延时|
|indexBinSize|1024|为索引使用的散列容器的初始数量|
|indexMaxBinSize|16384|散列容器使用的最大数量|
|directoryArchive|archive|被AMQ消息仓库用来存放归档的日报文件的目录路径|
|archiveDataLogs|false|如果为true,日报文件被归档而不是被删除|
|recoverReferenceStore|true|如果代理没有被干净地停掉时恢复引用仓库;this errs on the side of extreme caution|
|forceRecoverReferenceStore|false|强制引用仓库的恢复|
[/table]
在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>
这仅是使用有效属性为AMQ仓库自定义配置的一个小示例。
AMQ仓库,像KahaDB仓库一样,使用户能快速建立和运行起来,因为没有对其它数据库的额外依赖。但是当你想要运行一个ActiveMQ代理并使用已建立的关系数据库,你需要使用JDBC消息仓库。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值