ActiveMQ-mysql持久化

phs999發表於2021-01-01

ActiveMQ預設開啟持久化,使用自帶的檔案資料庫kahadb。

啟用mysql持久化需要修改配置檔案 \conf\activemq.xml。修改內容如下:

(1)新增資料庫連線的bean注入

<bean id="mysql-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="activemq"/>
<property name="password" value="activemq"/>
<property name="maxActive" value="200"/>
<property name="poolPreparedStatements" value="true"/> 

</bean>

同時要建立資料庫activemq,資料庫名稱與jdbc:mysql://localhost/activemq?relaxAutoCommit=true中的保持一致即可。另外需要將相應的資料庫連線驅動jar包放在ActiveMQ的安裝目錄的lib資料夾中。

(2)修改持久化方式persistenceAdapter

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

		<jdbcPersistenceAdapter dataSource="#mysql-ds" createTablesOnStartup="true" /> 


        </persistenceAdapter>

配置createTablesOnStartup設定為true的話,ActiveMQ在啟用時會自動在資料庫中建立3個資料庫表(資料庫表不存在的情況下),用於持久化訊息。

 

  • activemq_msgs:queue和topic的訊息都存在這個表中
  • activemq_acks:儲存持久訂閱的資訊和最後一個持久訂閱接收的訊息ID
  • activemq_lock:跟kahadb的lock檔案類似,確保資料庫在某一時刻只有一個broker在訪問

 

相關文章