【ActiveMQ】持久化消息隊列的三種方式

原文連接:https://tidyko.com/posts/632d0b70.htmlhtml

 

1.ActiveMQ消息持久化方式,分別是:文件、mysql數據庫、oracle數據庫java

2.修改方式:mysql

  a.文件持久化:spring

  ActiveMQ默認的消息保存方式,通常若是沒有修改過其餘持久化方式的話能夠不用修改配置文件。sql

  若是是修改過的,打開盤符:\apache-activemq-版本號\conf\activemq.xml,而後找到<persistenceAdapter>節點,將其替換成如下代碼段數據庫

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

  而後修改配置文件(此處演示爲spring+ActiveMQ),找到消息發送者所對應的JmsTemplate配置代碼塊,增長如下配置apache

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

  如下是JmsTemplate配置完整版oracle

 <!-- 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服務,再啓動,你能夠看到以前發送的消息未消費的依然保持在文件裏面,繼續讓監聽者消費。工具

  b.MySQL持久化post

  首先須要把MySql的驅動放到ActiveMQ的Lib目錄下,我用的文件名字是:mysql-connector-java-5.1.27.jar

  而後打開盤符:\apache-activemq-版本號\conf\activemq.xml,而後找到<persistenceAdapter>節點,將其替換成如下代碼段

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

  這樣就算完成了mysql持久化配置了,驗證方式同a,打開mysql數據庫你能看到三張表,分別是:activemq_acks,activemq_lock,activemq_msgs。

     c.Oracle持久化

     oracle的配置和mysql同樣,在Lib目錄下,放入oracle的驅動包,而後配置一下配置文件便可。

  <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>
相關文章
相關標籤/搜索