ActiveMQ 持久化消息队列的三种方式

  |  
阅读次数
  |  
字数 633
  |  
时长 ≈ 3 分钟

ActiveMQ消息持久化方式,分别是:文件mysql数据库oracle数据库

1)文件持久化

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

如果是修改过的,打开盘符:\apache-activemq-版本号\conf\activemq.xml,然后找到 <persistenceAdapter> 节点,将其替换成以下代码段:

1
2
3
<persistenceAdapter>
<kahaDB directory="${activemq.base}/data/kahadb"/>
</persistenceAdapter>

然后修改配置文件(此处演示为spring+ActiveMQ),找到消息发送者所对应的JmsTemplate配置代码块,增加以下配置:

1
2
<!--  是否持久化  DeliveryMode.NON_PERSISTENT=1:非持久 ; DeliveryMode.PERSISTENT=2:持久 -->   
<property name="deliveryMode" value="2" />

以下是JmsTemplate配置完整版

1
2
3
4
5
6
7
8
9
<!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->  
<bean id="jmsTemplateOne" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<!-- 设置默认的消息目的地-->
<property name="defaultDestination" ref="queueDestination"/>
<property name="receiveTimeout" value="10000" />
<!-- 是否持久化 DeliveryMode.NON_PERSISTENT=1:非持久 ; DeliveryMode.PERSISTENT=2:持久 -->
<property name="deliveryMode" value="2" />
</bean>

这样就算配置完成了文件持久化方式了,重启项目和ActiveMQ,发送一定消息队列之后关闭ActiveMQ服务,再启动,你可以看到之前发送的消息未消费的依然保持在文件里面,继续让监听者消费。

2)MySQL持久化

首先需要把 MySql 的驱动放到 ActiveMQLib 目录下,我用的文件名字是:mysql-connector-java-5.1.27.jar

然后打开 盘符:\apache-activemq-版本号\conf\activemq.xml ,然后找到 <persistenceAdapter> 节点,将其替换成以下代码段:

1
2
3
<persistenceAdapter>
<jdbcPersistenceAdapter dataDirectory="${activemq.base}/data" dataSource="#derby-ds"/>
</persistenceAdapter>

在配置文件中的broker节点外增加以下代码

1
2
3
4
5
6
7
8
 <bean id="derby-ds" class="org.apache.commons.dbcp.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="root"/>
<property name="password" value="123456"/>
<property name="maxActive" value="200"/>
<property name="poolPreparedStatements" value="true"/>
</bean>

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

3)Oracle持久化

oracle的配置和mysql一样,在Lib目录下,放入oracle的驱动包,然后配置一下配置文件即可。

1
2
3
4
5
6
7
8
<bean id="derby-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhsot:1521:orcl"/>
<property name="username" value="activemq"/>
<property name="password" value="amqadmin"/>
<property name="maxActive" value="200"/>
<property name="poolPreparedStatements" value="true"/>
</bean>