博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ActiveMQ-持久化存储方式
阅读量:4324 次
发布时间:2019-06-06

本文共 2073 字,大约阅读时间需要 6 分钟。

1、ActiveMQ消息持久化方式

  • 文件
  • MySQL数据库
  • oracle数据
  • LevelDB方式

2、如何修改持久化存储方式

  • 文件持久化

   ActiveMQ默认的消息保存方式,一般如果没有修改过其他持久化方式的话可以不用修改配置文件。

   可在\conf\activemq.xml配置,找到<persistenceAdapter>节点,修改即可

1 
2
3
View Code

   然后修改配置文件(此处演示为spring+ActiveMQ),找到消息发送者所对应的JmsTemplate配置代码块,增加以下配置(默认下是2,也就是持久化)

1 
2
View Code
  • MySQL持久化

   (1) 首先需要把MySQL的驱动和数据源相关包,放到ActiveMQ的lib目录下,这里我用mysql-connector-java-5.1.45.jar、commons-dbcp-1.2.2.jar、commons-pool-1.2.jar

     

   (2) 先手动创建个数据库activemq,打开activemq/conf/activemq.xml,找到<persistenceAdapter>节点,将其替换成

      

      配置一个Mysql数据源,persistenceAdapter节点的dataSource名称一致(需要在<broker节点外配置>)

      

      这样就算完成了mysql持久化配置了,验证方式同a,打开mysql数据库你能看到三张表,分别是:activemq_acks,activemq_lock,activemq_msgs。

      补充:dataSource指定持久化数据库的bean,createTablesOnStartup是否在启动的时候创建数据表,默认值是true,这样每次启动都会去创建数据表了,一般是第一次启动的时候设置为true,之后改成false。

      数据库表信息:

        activemq_msgs表:

             用于存储消息,Queue和Topic都存储在这个表中:

             ID:自增的数据库主键
             CONTAINER:消息的Destination
             MSGID_PROD:消息发送者客户端的主键
             MSG_SEQ:是发送消息的顺序,MSGID_PROD+MSG_SEQ可以组成JMS的MessageID
             EXPIRATION:消息的过期时间,存储的是从1970-01-01到现在的毫秒数
             MSG:消息本体的Java序列化对象的二进制数据
             PRIORITY:优先级,从0-9,数值越大优先级越高

        activemq_acks表:

             用于存储订阅关系。如果是持久化Topic,订阅者和服务器的订阅关系在这个表保存:

             主要的数据库字段如下:
             CONTAINER:消息的Destination
             SUB_DEST:如果是使用Static集群,这个字段会有集群其他系统的信息
             CLIENT_ID:每个订阅者都必须有一个唯一的客户端ID用以区分
             SUB_NAME:订阅者名称
             SELECTOR:选择器,可以选择只消费满足条件的消息。条件可以用自定义属性实现,可支持多属性AND和OR操作
             LAST_ACKED_ID:记录消费过的消息的ID。

        activemq_lock表:

                在集群环境中才有用,只有一个Broker可以获得消息,称为Master Broker,

             其他的只能作为备份等待Master Broker不可用,才可能成为下一个Master Broker。
             这个表用于记录哪个Broker是当前的Master Broker。

  • 类似MySQL的思路也能配置出Oracle 
  • LevelDB方式

    从ActiveMQ 5.6版本之后,又推出了LevelDB的持久化引擎。

  目前默认的持久化方式仍然是KahaDB,不过LevelDB持久化性能高于KahaDB,可能是以后的趋势。
  在ActiveMQ 5.9版本提供了基于LevelDB和Zookeeper的数据复制方式,用于Master-slave方式的首选数据复制方案

转载于:https://www.cnblogs.com/daishengda/p/9201835.html

你可能感兴趣的文章
fatal error C1853
查看>>
Ural 1001 - Reverse Root
查看>>
玩转webpack之webpack的entry output
查看>>
java 操作mongodb查询条件的常用设置
查看>>
黑马程序员_java基础笔记(02)...java语言基础组成
查看>>
对innodb 拷贝文件实现数据库的方式(转)
查看>>
python知识点 2014-07-09
查看>>
FloatingActionButton的一点学习感悟
查看>>
ABAP CDS ON HANA-(10)項目結合して一つ項目として表示
查看>>
网站地址信息
查看>>
产品经理 - 登录 注册
查看>>
Notepad++ 通过g++编译
查看>>
Ruby Gem 的基础知识和详解
查看>>
Vue学习
查看>>
html5的本地存储
查看>>
Java设计模式系列之中介者模式
查看>>
eclipse编译时过滤SVN版本控制信息方法(转)
查看>>
CSS3中使用calc()设置宽度和高度
查看>>
泉五培训Day5
查看>>
理解constructor属性
查看>>