当前位置 博文首页 > 文章内容

    Activemq 消息的存储和持久化

    作者:糖丝橙 栏目:IT相关内容 时间:2020-05-07 9:21:25

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    Activemq 的消息存储持久化:

         1.开启事务

         2.设置持久

         3.设置签收方式

         4.可持久化

    什么是可持久化:

         为了避免意外宕机丢失信息,需要做到重启后可以恢复消息队列。消息系统一般都会采用持久化机制。Activemq 的消息持久化机制有 JDBC AMQ KahaDB 和 LevelDB ,无论使用哪种持久化方式,消息的存储逻辑是一致的。

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

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

    持久化存储方式:

    0a5f7067b77ff91a6433c10de6426940.png

    KahaDB

         默认的消息持久化存储方式。在activemq.xml中的配置如下:

    281027144c4ca6736b77ddebdd88d1c0.png

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

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

         KahaDB 是一个专门针对消息持久化的解决方案,它对典型的消息使用模式进行了优化。

         数据被追加到data.log中。当不再需要log文件中的数据时,log文件将会被丢弃。

    kahadb 存储原理:

         1.db - .log : KahaDB 存储消息到预定义大小的数据记录文件中,文件命名为 db.log。当文件已满时,一个新的文件会随之创建,number 数值也会随之递增,当不再有引用到数据文件中的任何消息时,文件会被删除归档。

         2.db.data 该文件包含了持久化的BTree 索引,索引了消息数据记录的消息,它是消息的索引文件,本质上是B-Tree,使用B - Tree 作为索引指向 db - .log 里面存储的消息。

         3.db.free 当前 db.data 文件有哪些页面是空闲的,文件具体内容是所有空闲页的ID。

         4.db.redo 用来进行消息恢复,如果kahaDB 消息存储在强制退出后启动,用于恢复BTree 索引。

    lock 文件锁,表示当前获得 kahadb 读写权限的 borker 。

    LevelDB

         未成熟

    JDBC 消息存储

         使用第三方数据库进行消息的存储。

    具体步骤:

         1.将数据库驱动包,添加到 lib 文件夹下。

         2.jdbc 配置:

    69cef67ae6ea1f8df9b3a288e6072e9e.png

         dataSource : 指定将要引用的持久化数据库的bean 名称,createTableOnStartup 是否在启动的时候创建数据表,默认值是true。这样每次启动都会去创建数据表了。一般是第一次启动设置为true,之后设置为false。

         3.配置bean

         4.数据库中新建 activemq 数据库

         5.启动 activemq 就会自动在activemq 库中创建三张表.

    jdbc存储在点对点(queue) 类型中:

         当 DeliveryMode 设置为 DeliveryMode.PERSISTENT 时,会保存在数据库(activemq_msgs)中。

         当 DeliveryMode 设置为 DeliveryMode.NON_PERSISTENT 时,会保存在内存中。

         并且消息一旦被消费,就会从 borker 中删除

    topic 类型中:

         先启动消费者订阅 然后再生产的情况下 将消息保存到 activemq_acks。

    JDBC with Journal(高性能)

    修改配置文件:

    48af7f959c8180a24b105e137c9f3ca1.png

         这种方式克服了 JDBC Store 的不足,JDBC 每次消息过来,都需要去写库和读库。

         Activemq Journal 使用高速缓存技术写入技术,大大提高了性能。

         当消费者的消费速度能够及时跟上生产者消息的生产速度时,Journal 文件就能大大减少 DB 中的消息。

         学习年限不足,知识过浅,说的不对请见谅。

         世界上有10种人,一种是懂二进制的,一种是不懂二进制的。


    文章来源:csdn博客

    原文链接:https://blog.csdn.net/weixin_43326401/article/details/105964527

    如有侵权,请联系本人删除