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


原文鏈接:https://tidyko.com/posts/632d0b70.html

 

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

2.修改方式:

  a.文件持久化:

  ActiveMQ默認的消息保存方式,一般如果沒有修改過其他持久化方式的話可以不用修改配置文件。

  如果是修改過的,打開盤符:\apache-activemq-版本號\conf\activemq.xml,然后找到<persistenceAdapter>節點,將其替換成以下代碼段

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

  然后修改配置文件(此處演示為spring+ActiveMQ),找到消息發送者所對應的JmsTemplate配置代碼塊,增加以下配置

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

  以下是JmsTemplate配置完整版

 <!-- 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持久化

  首先需要把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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM