為了避免服務器宕機而導致消息丟失,ActiveMQ提供消息持久化機制。
ActiveMQ提供多種消息持久化的方式,如LevelDB Store、KahaDB 、AMQ、JDBC等,詳情可以訪問官網(wǎng)。
ActiveMQ默認是使用KahaDB持久化消息。在/conf/activemq.xml如下配置:
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
KahaDB是一個文件型數(shù)據(jù)庫,是以日志形式保存到文件來保證消息的持久化。
本篇博客主要介紹如果使用JDBC方式持久化消息,我選擇MySQL作為存儲數(shù)據(jù)庫。
配置數(shù)據(jù)源
首先需要在mysql中新建數(shù)據(jù)庫activemq,然后在/conf/activemq.xml配置如下數(shù)據(jù)源。注意在/lib目錄下需要添加mysql-connector-java-5.1.44.jar、druid-1.1.9.jar兩個Jar包,版本可自選。
<bean id="mysql-ds" class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close">
<property name="url"
value="jdbc:mysql://localhost:3306/activemq?relaxAutoCommit=true"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<property name="initialSize" value="1" />
<property name="minIdle" value="1" />
<property name="maxActive" value="10" />
<property name="poolPreparedStatements" value="true"/>
</bean>
引用數(shù)據(jù)源
<!--
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
-->
<persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#mysql-ds" />
</persistenceAdapter>
啟動
啟動之后,數(shù)據(jù)庫中就可以看見activemq_acks、activemq_lock、activemq_msgs三張表。
數(shù)據(jù)庫信息
activemq_acks:存儲訂閱關系。
字段 | 類型 | 描述 |
---|---|---|
CONTAINER | varchar | 消息的Destination |
SUB_DEST | varchar | 如果是使用static集群,則會有集群其他系統(tǒng)的信息 |
CLIENT_ID | varchar | 每個訂閱者的客戶端ID |
SUB_NAME | varchar | 訂閱者名稱 |
SELECTOR | varchar | 選擇器,可以選擇只消費滿足條件的消息 |
LAST_ACKED_ID | bigint | 最后一次確認ID,該訂閱者最后一次收到的消息的ID |
PRIORITY | bigint | 優(yōu)先級,值越大優(yōu)先級越高 |
XID | varchar | – |
activemq_msgs:存儲消息。文章來源:http://www.zghlxwxcb.cn/news/detail-682396.html
字段 | 類型 | 描述 |
---|---|---|
ID | bigint | 主鍵ID |
CONTAINER | varchar | 消息的Destination |
MSGID_PROD | varchar | 消息發(fā)送者客戶端的主鍵 |
MSGID_SEQ | bigint | 發(fā)送消息的順序,MSGID_PROD+MSG_SEQ可以組成JMS的MessageID |
EXPIRATION | bigint | 消息的過期時間,存儲的是從1970-01-01到現(xiàn)在的毫秒數(shù) |
MSG | longblob | 消息內(nèi)容 |
PRIORITY | bigint | 優(yōu)先級,值越大優(yōu)先級越高 |
XID | varchar | – |
activemq_lock:存儲鎖信息。文章來源地址http://www.zghlxwxcb.cn/news/detail-682396.html
字段 | 類型 | 描述 |
---|---|---|
ID | bigint | 主鍵ID |
TIME | bigint | 時間 |
BROKER_NAME | varchar | 擁有鎖的Broker的名稱 |
到了這里,關于ActiveMQ使用JDBC持久化消息的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!