ActiveMQ_持久化,MySql以及高性能的journal日志
发布时间:2023-02-13 13:27:20 所属栏目:MySql教程 来源:
导读: 首先将连接mysql所需的jar包放到ActiveMQ安装目录下的lib文件夹中
image
第二步,创建数据库,用于接下来ActiveMQ连接使用。 接下来修改配置文件,配置文件为安装目录下conf目录下的activemq.xm
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 (编辑:开发网_新乡站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐