加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_新乡站长网 (https://www.0373zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

ActiveMQ_持久化,MySql以及高性能的journal日志

发布时间:2023-02-13 13:27:20 所属栏目:MySql教程 来源:
导读:  首先将连接mysql所需的jar包放到ActiveMQ安装目录下的lib文件夹中

  image

  第二步,创建数据库,用于接下来ActiveMQ连接使用。 接下来修改配置文件,配置文件为安装目录下conf目录下的activemq.xm
  首先将连接mysql所需的jar包放到ActiveMQ安装目录下的lib文件夹中
 
  image
 
  第二步,创建数据库,用于接下来ActiveMQ连接使用。 接下来修改配置文件,配置文件为安装目录下conf目录下的activemq.xml
 
  在修改之前,最好将文件备份一次,以免改错
 
  image
 
  找到persistenceAdapter标签,将原有默认的kahaDB注释掉,添加支持JDBC的标签
 
  <persistenceAdapter>
 
   <jdbcPersistenceAdapter dataSource="#mysql-ds"/>
 
  persistenceAdapter>
 
  现在添加数据库的配置,在这个文件夹中,添加一个bean。注意这里bean的id,就是上面jdbcPersistenceAdapter标签中dataSource引用的id
 
  <bean id="mysql-ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
 
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
 
    <property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>
 
    <property name="username" value="activemq"/>
 
    <property name="password" value="activemq"/>
 
    <property name="poolPreparedStatements" value="true"/>
 
  bean>
 
  放bean的位置也有讲究,一定要放在broker标签的外面
 
  image
 
  做到这一步,ActiveMQ与MySql整合已经完成,如果配置没问题,在启动ActiveMQ的时候,它会在数据库中自动创建三张表分,别是ACTIVEMQ_ACKS、 ACTIVEMQ_LOCK和 ACTIVEMQ_MSGS。
 
  三张表介绍
 
  ACTIVEMQ_MSGS:
 
  消息表,Queue和Topic都存在里面。队列的消息在消费后会删除,而持久化订阅则会一直保存在里面。
 
  下面是自动生成表后,这张表的建表语句,不用手动生成。
 
  CREATE TABLE `ACTIVEMQ_MSGS` (
 
    `ID` bigint(20) NOT NULL,
 
    `CONTAINER` varchar(250) NOT NULL,
 
    `MSGID_PROD` varchar(250) DEFAULT NULL,
 
    `MSGID_SEQ` bigint(20) DEFAULT NULL,
 
    `EXPIRATION` bigint(20) DEFAULT NULL,
 
    `MSG` longblob,
 
    `PRIORITY` bigint(20) DEFAULT NULL,
 
    `XID` varchar(250) DEFAULT NULL,
 
    PRIMARY KEY (`ID`),
 
    KEY `ACTIVEMQ_MSGS_MIDX` (`MSGID_PROD`,`MSGID_SEQ`),
 
    KEY `ACTIVEMQ_MSGS_CIDX` (`CONTAINER`),
 
    KEY `ACTIVEMQ_MSGS_EIDX` (`EXPIRATION`),
 
    KEY `ACTIVEMQ_MSGS_PIDX` (`PRIORITY`),
 
    KEY `ACTIVEMQ_MSGS_XIDX` (`XID`)
 
  ) ENGINE=InnoDB DEFAULT CHARSET=ascii;
 
  ACTIVEMQ_ACKS:
 
  用于储存订阅关系,如果是持久化Topic,服务器订阅和订阅者关系会存在这个表。
 
  下面是自动生成表后,这张表的建表语句,不用手动生成。
 
  CREATE TABLE `ACTIVEMQ_ACKS` (
 
    `CONTAINER` varchar(250) NOT NULL,
 
    `SUB_DEST` varchar(250) DEFAULT NULL,
 
    `CLIENT_ID` varchar(250) NOT NULL,
 
    `SUB_NAME` varchar(250) NOT NULL,
 
    `SELECTOR` varchar(250) DEFAULT NULL,
 
    `LAST_ACKED_ID` bigint(20) DEFAULT NULL,
 
    `PRIORITY` bigint(20) NOT NULL DEFAULT '5',
 
    `XID` varchar(250) DEFAULT NULL,
 
    PRIMARY KEY (`CONTAINER`,`CLIENT_ID`,`SUB_NAME`,`PRIORITY`),
 
    KEY `ACTIVEMQ_ACKS_XIDX` (`XID`)
 
  ) ENGINE=InnoDB DEFAULT CHARSET=ascii;
 
  ACTIVEMQ_LOCK:
 
  这个表在集群环境中才有用,用于记录当前MasterBroker的。
 
  下面是自动生成表后,这张表的建表语句,不用手动生成。
 
  CREATE TABLE `ACTIVEMQ_LOCK` (
 
    `ID` bigint(20) NOT NULL,
 
    `TIME` bigint(20) DEFAULT NULL,
 
    `BROKER_NAME` varchar(250) DEFAULT NULL,
 
    PRIMARY KEY (`ID`)
 
  ) ENGINE=InnoDB DEFAULT CHARSET=ascii;
 
  MySql配合使用高性能的journal
 
  在上几步,已经完成了ActiveMQ使用MySql实现持久化,但是官网上是这样说的:对于长期的持久性,我们建议使用JDBC和高性能journal。如果你愿意,你可以只使用JDBC,但是它很慢。
 
  单单使用MySql,虽然实现了持久化,但是不能避免的是ActiveMQ与MySql通信时的网络延迟以及数据库读写所产生的耗时,所以ActiveMQ有了一个高性能的journal日志配合使用。它会在消费者快速消费的时候在journal中读取数据,在消费者消费比较慢的时候,会默默的将未消费的数据同步到数据库当中。
 
  image
 
  如何实现?
 
  将上一步骤的持久化配置修改如下
 
 
  <persistenceFactory>
 
   <journalPersistenceAdapterFactory
 
   journalLogFiles="5"
 
   dataSource="#mysql-ds"
 
   dataDirectory="activemq-data" />
 
  persistenceFactory>
 
  重启过后mysql持久化,随意发一些消息,就会发现消息在不消费的情况下,等一段时间,数据库中才会有数据,并且在队列消费过后,数据库的消息也会一段时间后才删除。
 
  而且在journal目录下会产生一些文件,这些文件就是一些持久化文件。文件在ActiveMQ安装目录的/bin/activemq-data/journal中
 
  [root@localhost journal]# pwd
 
  /usr/local/activemq/bin/activemq-data/journal
 
  [root@localhost journal]# ll
 
  总用量 84
 
  -rw-r--r--. 1 root root      160 12月  2 11:16 control.dat
 
  -rw-r--r--. 1 root root 20971520 12月  2 11:44 log-000.dat
 
  -rw-r--r--. 1 root root 20971520 12月  2 11:13 log-001.dat
 
  -rw-r--r--. 1 root root 20971520 12月  2 11:13 log-002.dat
 
  -rw-r--r--. 1 root root 20971520 12月  2 11:13 log-003.dat
 
  -rw-r--r--. 1 root root 20971520 12月  2 11:13 log-004.dat
 
 

(编辑:开发网_新乡站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!