ActiveMQ学习之消息存储和可持久化

2020-12-07 15:15:18 浏览数 (1)

一、activeMQ高可用

1、事物

2、签收

3、持久

4、可持久化

二、持久化机制

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

ActiveMQ持久化机制有:JDBC、AMQ、KahaDB和LevelDB,无论哪种持久化方式,消息的存储逻辑都是一致的。

就是在发送者将消息发送出去后,消息中心首先将消息存储到本地数据文件、内存数据库或者远程数据库等再试图将消息发送给接收者,成功则将消息从内存中删除,失败则继续尝试发送。

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

三、消息持久化机制有哪些

1、AMQ Message Store : 基于文件存储方式,以前默认的消息存储方式,现在基本不用。AMQ是一种文件存储形式,它具有写入速度快和容易恢复的特点。消息存储在一个一个文件当中,文件默认大小为32M,当一个存储文件被全部消费,那么这个文件会被标识为可删除,在下一个清除阶段被删除

2、KahaDB消息存储:

基于日志文件,从5.4版本之后开始默认支持持久化插件,可适用于任何场景,提高了性能和恢复能力。消息存储使用一个事务日志和仅用一个索引文件来存储他所有的地址。KahaDB是一个专门针对消息持久化的解决方案,他对典型的消息使用模式进行优化。数据被追加到data logs中。当不在需要log文件中数据时,log文件会被丢弃。

配置:1、进入到ActiveMQ安装目录下的conf文件夹下

2、编辑activemq.xml,在这里我们可以看到默认的存储方式就是KahaDB

kahadb文件组成:

1、进入到安装目录下data文件夹中,可以看到有个kahadb文件夹

2、进入kahadb文件夹中,可以看到组成kahadb的文件

db-1.log:存储消息到预定义大小的数据记录文件中,文件名为db-<Number>.log。当数据记录满时,一个新的文件会随之创建,

number数字会随之增加,当不在有引用到数据文件中任何消息时,文件会被删除或者归档。 db.data:该文件包含了持久化的BTree索引,索引消息数据记录中的消息,他是消息的索引文件,本质上是B-Tree(B树),

使用B-Tree作为索引指向db-<Number>.log里面存储信息。

db.free:当前db.data文件中哪些页面是空闲页,文件具体内容是所有空闲页的id

db.redo:用来进行消息恢复,如果KahaDB消息存储在强制退出后启动,用于恢复B-Tree索引

lock:文件锁,表示当前获得Kahadb读写权限的broker

3、JDBC消息存储:

基于jdbc进行存储

详细查看:https://my.oschina.net/u/3535099/blog/3161719

4、LevelDB消息存储

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

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

默认配置:

代码语言:javascript复制
 <persistenceAdapter>
      <levelDB directory="activemq-data"/>
    </persistenceAdapter>

5、JDBC Message store with ActiveMQ journal

这种方式克服了JDBC store的不足,JDBC每次消息过来都需要去操作数据库,ActiveMQ journal,使用高速缓存写入技术,大大提高了性能。

当消费者消费的速度能够及时跟上生产者生产消息的速度,journal文件能够大大减少需要写入到DB中的消息。

0 人点赞