ActiveMQ持久化消息的三种方式

Posted grefr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ActiveMQ持久化消息的三种方式相关的知识,希望对你有一定的参考价值。

详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt362

本文只介绍三种方式,分别是持久化为文件,mysql,Oracle。下面逐一介绍。

A:持久化为文件

     这个你装ActiveMQ时默认就是这种,只要你设置消息为持久化就可以了。涉及到的配置和代码有

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

producer.Send(request, MsgDeliveryMode.Persistent, level, TimeSpan.MinValue);

B:持久化为MySql

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

     接下来你修改配置文件

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

在配置文件中的broker节点外增加

 

 <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="activemq"/>
   <property name="password" value="activemq"/>
   <property name="maxActive" value="200"/>
   <property name="poolPreparedStatements" value="true"/>
 </bean>

 

从配置中可以看出数据库的名称是activemq,你需要手动在MySql中增加这个库。

然后重新启动消息队列,你会发现多了3张表

1:activemq_acks

2:activemq_lock

3:activemq_msgs

C:持久化为Oracle

    和持久化为MySql一样。这里我说两点

1;在ActiveMQ安装文件夹里的Lib文件夹中增加Oracle的JDBC驱动。驱动文件位于Oracle客户端安装文件中的product\11.1.0\client_1\jdbc\lib文件夹下。

2:

 

 <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:@10.53.132.47:1521:cmfudv1"/>
   <property name="username" value="qdcommu"/>
   <property name="password" value="qdcommu"/>
   <property name="maxActive" value="200"/>
   <property name="poolPreparedStatements" value="true"/>
 </bean>

 

这里的jdbc:oracle:thin:@10.53.132.47:1521:cmfudv1按照自己实际情况设置一下就可以了,特别注意的是cmfudv1是SID即服务名称而不是TNS中配置的节点名。各位同学只需要替换IP,端口和这个SID就可以了。

 

以上是关于ActiveMQ持久化消息的三种方式的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ笔记08消息队列RabbitMQ之防止消息丢失的三种方式(生产者消息确认消费者消息确认消息持久化)

学习ActiveMQ:activemq的持久化

ActiveMQ持久化方式(转)

ActiveMQ 消息存储持久化

ActiveMQ(09):ActiveMQ消息存储持久化

ActiveMQ消息存储持久化