MQ學習系列:
- 消息隊列概念與認知
- ActiveMQ Topic消息重發
- ActiveMQ Topic 消息持久化訂閱
- zookeeper+ActiveMQ集群實現高可用
一、持久化到文件(默認)
第一步:在${activemq.base}/conf/activemq.xml文件中配置持久化適配器。
<!--
Configure message persistence for the broker. The default persistence
mechanism is the KahaDB store (identified by the kahaDB tag).
For more information, see:
http://activemq.apache.org/persistence.html
-->
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
以上配置為默認,文件地址為E:\ActiveMQ\apache-activemq-5.15.8\data\kahadb目錄下。
第二步:發送消息時代碼
//參數:消息, 持久化/不持久化,優先級,存儲時長ms
producer.send(message,DeliveryMode.PERSISTENT,1,1000*60*5);
我們看看DeliveryMode這個類是什么鬼?
// IntelliJ API Decompiler stub source generated from a class file
// Implementation of methods is not available
package javax.jms;
public interface DeliveryMode {
int NON_PERSISTENT = 1;
int PERSISTENT = 2;
}
第三步:消息訂閱者創建消費對象時
- connection start()前添加客戶端id
//設置客戶端id
connection.setClientID("client-1");
- 創建客戶端持久化訂閱customer
//客戶端持久化訂閱
TopicSubscriber consumer = session.createDurableSubscriber(topic, "client1-sub");
經過如上三步,我們便可以通過文件來持久化我們的Topic訂閱。
二、持久化到數據庫(mysql)
第一步:將MySQL的數據庫驅動復制到ActiveMQ的lib目錄下。
第二步:在${activemq.base}/conf/activemq.xml文件中配置持久化配置。
<persistenceAdapter>
<jdbcPersistenceAdapter dataDirectory="${activemq.base}/data"
dataSource="#mysql-ds"/>
</persistenceAdapter>
第三步:在${activemq.base}/conf/activemq.xml文件中配置數據源。
<bean id="mysql-ds" class="org.apache.commons.dbcp2.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://localhost:3306/activemq?relaxAutoCommit=true"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
配置完成啟動程序,系統自動生成三張表;
具體表結構參考 這里