ActiveMQ--持久化机制

ActiveMQ持久化机制

为了避免意外宕机以后丢失信息,需要做到重启后可以恢复消息队列,消息系统一般都会采用持久化机制。

ActiveMQ的持久化机制有JDBC,AMQ,KahaDB和LevelDB,无论使用哪种持久化方式,消息的存储逻辑都是一致的。就是在发送者将消息发送出去后,消息中心首先将消息存储到本地数据文件、内存数据库或者远程数据库等再试图将消息发送给接收者,成功则将消息从存储中删除,失败则继续尝试发送。

消息中心启动以后首先检查指定的存储位置,如果有未发送成功的消息,则需要把消息发送出去。

AMQ Message Store

AMQ是一种文件存储形式,它具有写入速度快和容易恢复的特点。消息存储再一个个文件中,文件的默认大小为32M,当一个存储文件中的消息已经全部被消费,那么这个文件将被标识为可删除,在下一个清除阶段,这个文件被删除。

AMQ适用于ActiveMQ5.3之前的版本。

KahaDB(默认)

基于日志文件,从ActiveMQ5.4开始默认的持久化插件。

官网配置表:http://activemq.apache.org/kahadb

在这里插入图片描述

默认存储位置:
在这里插入图片描述

KahaDb是目前默认的存储方式,可用于任何场景,提高了性能和恢复能力。

消息存储使用一个事务日志和仅仅用一个索引文件来存储它所有的地址。

KahaDB是一个专门针对消息持久化的解决方案,它对典型的消息使用模式进行了优化。数据被追加到data logs中。当不再需要log文件中的数据的时候,log文件会被丢弃。

在这里插入图片描述

kehaDB在消息保存目录中只有4类文件和一个lock,跟ActiveMQ的其他几种文件存储引擎相比非常简洁。

1.  db-<Number>.log 
KahaDB存储消息到预定义大小的数据记录文件中,文件命名为db-<Number>.log。当数据文件已满时,一个新的文件会随之创建,number数值也会随之递增,它随着消息数量的增多,如每32M一个文件,文件名按照数字进行编号,如db-1.log、db-2.log....。当不再有引用到数据文件中的任何消息时,文件会被删除。

在这里插入图片描述

2. db.data
该文件包含了持久化的BTree索引,索引了消息数据记录中的消息,它是消息的索引文件,本质上是B-Tree(B树),使用BTree所谓索引指向db-<Number>.log里面存储的消息。
3. db.free
当前db.data文件里哪些页面是空闲的,文件具体内容是所有控线页的ID
4. db.redo
用来进行消息恢复,如果KahaDB消息存储再强制退出后启动,用于恢复BTree索引。
5. lock
文件锁,表示当前获得kahadb读写权限的broker。

JDBC

消息基于JDBC存储。

LevelDB

这种文件系统从ActiveMQ5.8之后引进,它和KahaDB非常相似,也是基于文件的本地存储数据库形式,但是它提供比KahaDB更快的持久性。

但它不使用自定义B-Tree实现来索引预写日志,而是使用基于LevelDB的索引。

默认配置如下:

<persistenceAdapter>
	<levelDBdirector="activemq-data"/>
</persistenceAdapter>

JDBC Message store with ActiveMQ Journal

发布了654 篇原创文章 · 获赞 1886 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/cold___play/article/details/104066693