ActiveMQ入门(五)ActiveMQ的持久化策略

前言

      本章讲解ActiveMQ的持久化策略

方法

1.概念

我们都知道,之前我们学习redis的时候学习了它有关的持久化策略,那么MQ也是如此,我们在之前的学习中重启MQ的话,之前代码产生的数据都会消失不见,这是十分可怕的,所以有必要学习其持久化策略。

2.ActiveMQ的持久化策略

1)Kahadb模式

这个模式是默认的持久化策略。

我们通过conf文件夹下的activemq.xml中有关的配置项可以看到:

这个模式存在诸多问题,但是效率很高,因为是基于内存的。

但是一旦我们重启MQ,那么该持久化策略将无力保障数据的安全。

2)JDBC模式

为了保证数据的安全性,我们牺牲一下效率,采用JDBC模式进行消息的持久化。

这种持久化的原理在于将消息信息存储于相应的数据库中,保证了数据的完整性。

那么我们需要进行如下的配置:

1.我们本次使用Oracle 11g来进行消息的持久化操作,我们需要实现准备有一台安装有Oracle 11g的环境,由于我的主机已经安装好了Oracle数据库,所以我就不在linux上安装啦,直接启动windows的oracle服务:

 

验证登录:

 

这证明我windows的Oracle完全可用,当然你如果安装在linux也行。

2. 我们对activemq.xml进行如下配置:

在<broker>标签内注释之前的kahadb模式的持久化策略。添加如下JDBC的持久化策略适配器:

<persistenceAdapter>    
	<jdbcPersistenceAdapter dataSource="#oracleDataSource" createTablesOnStartup="true" /> 
</persistenceAdapter>

在<broker/>标签下添加数据库连接池信息,本次使用的是dbcp连接池,因为该连接池的jar包默认有配置。

<!-- 配置JDBC持久化策略的连接池信息 -->
<bean id="oracleDataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>      
    <property name="url" value="jdbc:oracle:thin:@192.168.1.102:1521:orcl"/>      
    <property name="username" value="scott"/>     
    <property name="password" value="tiger"/>   
    <property name="maxTotal" value="200"/>
    <property name="poolPreparedStatements" value="true"/>
</bean>

3.准备相关jar包放入activeMQ的lib文件夹中

由于需要连接Oracle数据库,我们首先需要准备一下Oracle的数据库驱动包放入lib中如下所示:

 

因为dbcp连接池的相关jar包已经默认存在了,所以我们无需引入。

4.运行ActiveMQ查看效果

 

数据库中出现了三张用于ActiveMQ持久化的表:

  • activemq_msgs:queue和topic的消息都存在这个表中 
  • activemq_acks:存储持久订阅的信息和最后一个持久订阅接收的消息ID 
  • activemq_lock:跟kahadb的lock文件类似,确保数据库在某一时刻只有一个broker在访问 

表创建完成后,需要将下面配置文件的true改为flase,以免每次都创建表:

<persistenceAdapter>    
    <jdbcPersistenceAdapter dataSource="#oracleDataSource" createTablesOnStartup="false" /> 
</persistenceAdapter>

我们执行生产者代码:

这个时候我们重启MQ,通过之前的代码向MQ中添加数据,测试重启后是否会消失:

重启前:

重启后:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值