activimq消息隊列持久化配置
阿新 • • 發佈:2017-05-23
重新發送 dstat alt drive 持久化 password logs 默認 生產
activimq持久化常用的有三種方式:1、文件持久化 2、mysql持久化 3、oracle持久化
在activimq的配置文件中默認開啟了文件持久化
同時我們需要修改一行代碼:
這樣在activimq重啟之後就不會有消息丟失了
如果要使用mysql持久化的話需要修改配置文件
<persistenceAdapter> <jdbcPersistenceAdapter dataSource="#mysql-ds"/> </persistenceAdapter>
然後還需要配置一個datasource,這個datasource需要配置在broker節點外面
1 <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 2 <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 3 <property name="url" value="jdbc:mysql://localhost:3306/test?relaxAutoCommit=true"/> 4 <property name="username" value="root"/> 5 <property name="password" value="Java0713!"/> 6 <property name="maxActive" value="200"/> 7 <property name="poolPreparedStatements" value="true"/> 8 </bean>
同時需要mysql數據庫驅動包mysql-connector-java-5.1.5-bin.jar,將該jar包放到activimq的lib目錄下
啟動activimq,這是發現activimq啟動不了,查看啟動日誌,發現報錯信息:
這是再加入commons-dbcp-1.2.jar包,再啟動,還是啟動不了,再查看啟動日誌,發現報錯信息:
再加入commons-pool.jar包,再啟動,這是啟動正常了,發現數據庫多了三張表:
發送五條下次進行測試,這時並沒有接收,發現多了五條數據
當消息接收之後,這五條記錄消失
遺留問題:
當消費者消息接收完之後重啟activimq,這時生產者重新發送消息,一切都正常
但是如果消費者消息沒有接收完就重啟的話,生產者就不能繼續發送消息,消費者也不能接收任何消息,包括之前遺留的
activimq消息隊列持久化配置