ActiveMQ消息持久化-JDBC

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章

ActiveMQ 消息存储持久化

ActiveMQ持久化到mysql实现消息永不丢失

ActiveMQ 配置jdbc主从

ActiveMQ 消息存储持久化

ActiveMQ的学习(ActiveMQ的持久化)

ActiveMQ消息持久化