默认的activemq消息存储是通过一个所谓的AMQ Message Store来完成。AMQ Message Store是一个高效的可嵌入支持事务的消息存储解决方案。在此方案下消息(Message)本身以日志的形式实现持久化,存放在Data Log里。并且还对日志里的消息做了引用索引,方便快速取回Message。一般情况下消息索引存放于内存(Cache)中,MQ Server定期将索引内容持久化,存放到Reference Store。Message Data Log文件是有容量限制的,默认是32MB,可自行配置容量。当该Data Log文件里所有消息都被消费完的时候,Data Log文件就会被加上一个标记,通知下一次消息清理时可以被处理掉(处理方式可以是delete或是转移到Achieve目录)。
AMQ Message Store方案中 Cache 、Data Log、Reference Store 协作图如下:
你可以在conf/activemq.xml配置文件里添加上如下配置:
<persistenceAdapter>
<amqPersistenceAdapter directory="activemq-data" maxFileLength="32mb"/>
</persistenceAdapter>
属性说明
property name |
default value |
Comments |
directory |
activemq-data |
存储消息文件和日志的目录 |
useNIO |
true |
使用 NIO 特性 |
syncOnWrite |
false |
同步写文件到磁盘 |
maxFileLength |
32mb |
Message Data日志文件的最大 Size |
persistentIndex |
true |
持久化日志索引,如果设为 false ,则在内存中保存 |
maxCheckpointMessageAddSize |
4kb |
在自动提交前在事务中能保持的最大消息数 |
cleanupInterval |
30000 |
每隔多少时间清理不再使用的消息日志(毫秒) |
indexBinSize |
1024 |
这个值是用来提升索引的性能的,值越大,索引相对性能越好 |
indexKeySize |
96 |
index key的size,index key基于message id |
indexPageSize |
16kb |
索引页的size |
directoryArchive |
archive |
消费完的Data Log存放的目录 |
archiveDataLogs |
false |
设置为true的话,消费完的Data Log就放到Archive目录,而不是删除。 |
AMQ Message Store体系中 目录结构参照下图 :
顶层目录broker name
用broker name命名,默认目录名是localhost,broker name在activemq的配置文件里指定,以下是它的子目录:
archive
丢弃的Data Log就放到这里,当archiveDataLogs 属性配置为true时才会存在
journal
message data log的所在
kr-store
reference store 目录
data
引用索引所在目录
state
记录store的状态
tmp-storage
用来存储一些事物性的消息以减轻内存的负担例如等待正常但是速度很慢的消费端来消费非持久化的Topic.
安装(参考:http://blog.csdn.net/zhu_tianwei/article/details/17687401):
1.安装jdk环境略
2.下载安装activemq
下载:wget http://mirrors.cnnic.cn/apache/activemq/5.10.0/apache-activemq-5.10.0-bin.tar.gz
tar -zxvf apache-activemq-5.10.0-bin.tar.gz
cd ./apache-activemq-5.10.0/bin
./activemq start #启动
./activemq stop #关闭
查看控制台http://127.0.0.1:8161/admin, 默认端口:8161 默认用户:admin/admin 配置在conf/users.properties
参考:http://longdick.iteye.com/blog/444632