原文連接: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>