目錄
一、安裝activemq
1、下載activemq鏡像
docker pull webcenter/activemq
2、查看activemq鏡像
docker images
二、amq數據庫持久化
1、在mysql中創建對應的數據庫
例如:amq數據庫
2、下載mysql-connector-java-5.1.49.jar
下載地址:https://dev.mysql.com/downloads/connector/j/5.1.html
3、運行amq容器帶文件夾
docker run -d -v /usr/amq:/opt/activemq/amq --name activemq -p 61616:61616 -p 8161:8161 webcenter/activemq
4、進容器操作
docker exec -it activemq /bin/bash
5、拷貝文件到lib下
cp amq/mysql-connector-java-5.1.49.jar lib
6、修改配置文件
vim conf/activemq.xml
註釋原來的持久化配置
80 <!--
81 <persistenceAdapter>
82 <kahaDB directory="${activemq.data}/kahadb"/>
83 </persistenceAdapter>
84 -->
添加數據庫適配器
<persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#mysql-ds"/>
</persistenceAdapter>
添加數據庫連接屬性配置
<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://192.168.110.130:3306/amq?relaxAutoCommit=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
7、保存配置文件,退出容器,重啓docker容器
Docker restart activemq
重啓後就會看到amq數據庫創建了3張表
至此,基於docker的activemq JDBC持久化配置完成
三、表說明
1、activemq_msgs表
作用:用於存儲消息,Queue和Topic都存儲在這個表中:
ID:自增的數據庫主鍵
CONTAINER:消息的Destination
MSGID_PROD:消息發送者客戶端的主鍵
MSG_SEQ:是發送消息的順序,MSGID_PROD+MSG_SEQ可以組成JMS的MessageID
EXPIRATION:消息的過期時間,存儲的是從1970-01-01到現在的毫秒數
MSG:消息本體的Java序列化對象的二進制數據
PRIORITY:優先級,從0-9,數值越大優先級越高
2、activemq_acks表
作用:用於存儲訂閱關係。如果是持久化Topic,訂閱者和服務器的訂閱關係在這個表保存:
主要的數據庫字段如下:
CONTAINER:消息的Destination
SUB_DEST:如果是使用Static集羣,這個字段會有集羣其他系統的信息
CLIENT_ID:每個訂閱者都必須有一個唯一的客戶端ID用以區分
SUB_NAME:訂閱者名稱
SELECTOR:選擇器,可以選擇只消費滿足條件的消息。條件可以用自定義屬性實現,可支持多屬性AND和OR操作
LAST_ACKED_ID:記錄消費過的消息的ID。
3、activemq_lock表
作用:在集羣環境中才有用,只有一個Broker可以獲得消息,稱爲Master Broker,
其他的只能作爲備份等待Master Broker不可用,纔可能成爲下一個Master Broker。
這個表用於記錄哪個Broker是當前的Master Broker。