ActiveMQ 消息存储持久化

馋奶兔 提交于 2019-11-28 12:57:21

ActiveMQ中对于投递模式设置为持久化的消息,broker接收到到消息之后,会先把消息存储到存储介质,然后再转发到消息的监听者
ActiveMQ持久化方式:AMQ、KahaDB、JDBC、LevelDB
持久化配置路径:ActiveMQ\apache-activemq\conf\activemq.xml

Message保存方式

  1. PERSISTENT:保存到磁盘,consumer消费之后,message被删除。
  2. NON_PERSISTENT:保存到内存,消费之后message被清除。

kahaDB 持久化为文件(默认)

所有消息顺序添加到一个日志文件中,同时另外有一个索引文件记录指向这些日志的存储地址,还有一个事务日志用于消息回复操作。

特点:基于文件的本地数据库储存形式,是一个支持事务,可靠,高性能,可扩展的消息存储器。

在data/kahadb这个目录下,会生成四个文件,来完成消息持久化

  1. db.data它是消息的索引文件,本质上是B-Tree(B树),使用B-Tree作为索引指向db-*.log里面存储的消息
    一旦这个消息不在被需要,数据文件可以被删除或归档。
  2. db.redo用来进行消息恢复
  3. db-*.log存储消息内容。新的数据以APPEND的方式追加到日志文件末尾。属于顺序写入,因此消息存储是比较快的。默认是32M,达到阀值会自动递增
  4. lock文件锁,写入当前获得kahadb读写权限的broker ,用于在集群环境下的竞争处理
<persistenceAdapter>
    <kahaDB directory="${activemq.data}/kahadb" journalMaxFileLength="32mb"/>
</persistenceAdapter>

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!