1. 程式人生 > >ActiveMQ消息持久化-JDBC

ActiveMQ消息持久化-JDBC

activemq jdbc

JDBC

可以將消息存儲到數據庫中,例如:Mysql、SQL Server、Oracle、DB2。

使用JDBC持久化方式,數據庫會創建3個表:activemq_msgs,activemq_acks和activemq_lock。

一、配置方式(Oracle):

conf/acticvemq.xml

<beans>
  <broker brokerName="test-broker" persistent="true" xmlns="http://activemq.apache.org/schema/core">
    <persistenceAdapter>
      <jdbcPersistenceAdapter dataSource="#oracle-ds" createTablesOnStartup="false"/>
    </persistenceAdapter>
  </broker>
  <bean id="oracle-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="url" value="jdbc:oracle:thin:@192.168.3.123:1521:orcl"/>
    <property name="username" value="db_name"/>
    <property name="password" value="db_password"/>
    <property name="maxActive" value="200"/>
    <property name="poolPreparedStatements" value="true"/>
  </bean>
</beans>

二、數據庫表信息

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。



參考資料:

http://www.cnblogs.com/binyue/p/5371479.html

ActiveMQ消息持久化-JDBC