zoukankan      html  css  js  c++  java
  • ActiveMQ的学习(二)(ActiveMQ的持久化)

    消息持久化

    消息持久化是保证消息不丢失的重要方式。

    ActiveMQ提供了以下三种的消息存储方式:

    1. Memory消息存储-基于内存的消息存储。

    2. 基于日志消息存储方式,KahaDB是ActiveMQ的默认日志存储方式,它提供了容量的提升和恢复能力。

    3. 基于JDBC的消息存储方式-数据存储于数据库中(如:mysql)

    (此外还有LevelDB存储,AMQ方式--只适用于5.3版本以前)

    ActiveMQ持久化机制流程图:

    基于内存的存储

    注意:基于内存的存储在重启ActiveMQ的时候消息会丢失,具体的效果在yml文件中配置如下图所示即可

    基于日志消息存储(kahadb)

    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 ,用于在集群环境下的竞争处理。

    注意:如果采用这种策略,那么日志文件都会保存的如下目录中:

    yml配置文件配置如下:

    基于JDBC的消息存储方式

    使用JDBC持久化方式,数据库默认会创建3个表,每个表的作用如下:

    activemq_msgs:queue和topic的消息都存在这个表中。

    activemq_acks:存储持久订阅的信息和最后一个持久订阅接收的消息ID。

    activemq_lock:跟kahadb的lock文件类似,确保数据库在某一时刻只有一个broker在访问。

    注意:首先yml配置

    之后在activemq.xml中插入如下内容

    1. 配置数据库连接池(这里3306和relaxAutoCommit=true有的文章里没有写,未测试过)

    1 <!--class也可以写成org.apache.commons.dbcp.BasicDataSource-->
    2 <bean id="mysql-ds" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
    3     <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    4     <property name="url" value="jdbc:mysql://127.0.0.1:3306/activemq?relaxAutoCommit=true" />
    5     <property name="username" value="activemq" />
    6     <property name="password" value="activemq" />
    7     <property name="maxActive" value="200" />
    8     <property name="poolPreparedStatements" value="true" />
    9 </bean>

    要注意位置如下:手动创建一个名字为activemq的数据库(或者使用已有的数据库)

    2. 配置持久化策略

    注意:createTablesOnStartup="true"表示在第一次启动时自动建立表结构,再次启动时,应该改为false。

    1 <!-- 这里要注意dataSource的名称要跟上面bean的id配置的名称一样 -->
    2 <persistenceAdapter>    
    3     <jdbcPersistenceAdapter dataSource="mysql-ds" createTablesOnStartup="true" /> 
    4 </persistenceAdapter>

    要注意位置如下:

    之后复制对应的jar包到activemq解压目录下的lib下

    这里要注意:(jar包版本无限制)

    如果你上面采用的是com.alibaba.druid.pool.DruidDataSource的方式:那么需要复制druid-1.1.6.jar和mysql-connector-java-5.1.46.jar

    如果你上面采用的是org.apache.commons.dbcp.BasicDataSource的方式:那么需要复制commons-dbcp-1.4和mysql-connector-java-8.0.9和commons-pool-1.6

    最后重启ActiveMQ即可

    参考:

    https://blog.csdn.net/qq_20597727/article/details/81320298

    持续更新!!!!

  • 相关阅读:
    php关于网页乱码问题
    EditPlus编写PHP使用技巧
    Dedecms当前位置(面包屑导航)的处理
    css有关鼠标移动上去图片变透明度变化
    CSS之Position详解
    如何修改FlashFXP默认编辑工具使用记事本打开
    ecshop点击订购、加入按钮没反应的解决方法
    kindEditor完整认识 PHP上调用并上传图片说明
    OpenCV 实现分水岭算法
    OpenCV 矩形轮廓检测
  • 原文地址:https://www.cnblogs.com/flyinghome/p/12309702.html
Copyright © 2011-2022 走看看