ActiveMQ中对于投递模式设置为持久化的消息,
broker
接收到到消息之后,会先把消息存储到存储介质
,然后再转发到消息的监听者
ActiveMQ持久化方式:AMQ、KahaDB、JDBC、LevelDB
持久化配置路径:ActiveMQ\apache-activemq\conf\activemq.xml
Message保存方式
PERSISTENT
:保存到磁盘,consumer消费之后,message被删除。NON_PERSISTENT
:保存到内存,消费之后message被清除。
kahaDB 持久化为文件(默认)
所有消息顺序添加到一个日志文件中,同时另外有一个索引文件记录指向这些日志的存储地址,还有一个事务日志用于消息回复操作。
特点:基于文件的本地数据库储存形式,是一个支持事务,可靠,高性能,可扩展的消息存储器。
在data/kahadb这个目录下,会生成四个文件,来完成消息持久化
db.data
它是消息的索引文件,本质上是B-Tree(B树)
,使用B-Tree作为索引指向db-*.log
里面存储的消息
一旦这个消息不在被需要,数据文件可以被删除或归档。db.redo
用来进行消息恢复db-*.log
存储消息内容。新的数据以APPEND
的方式追加到日志文件末尾。属于顺序写入,因此消息存储是比较快的。默认是32M
,达到阀值会自动递增lock
文件锁,写入当前获得kahadb读写权限的broker ,用于在集群环境下的竞争处理
<persistenceAdapter> <kahaDB directory="${activemq.data}/kahadb" journalMaxFileLength="32mb"/> </persistenceAdapter>