ActiveMQ-存储策略

Kahadb

        <persistenceAdapter>
            <kahaDB directory="${activemq.data}/kahadb" journalMaxFileLength="16mb"/>
        </persistenceAdapter>
  • 日志形式存储消息
  • B-Tree存储索引
  • 支持JMS事务
  • 支持多种恢复机制
  • journalMaxFileLength为最大文件大小,并非总存储空间,只是拆分多文件存储
  • MQ关闭,自动序列化保存到文件
  • MQ内存不足,将部分数据序列化保存到文件,存储形式为内存+文件

DB

bean

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

有疑问可以打开./examples/activemq-jdbc-performance.xml查看详细。

examples下面涵盖大量配置,可以仔细研究。

相关驱动,请在maven仓库中直接搜索 mysql-connector-java,各种下载资源比较烂,这个靠谱。

复制到./lib目录下即可。

persistenceAdapter

        <persistenceAdapter>
            <!-- <kahaDB directory="${activemq.data}/kahadb"/> -->
			<jdbcPersistenceAdapter xmlns="http://activemq.apache.org/schema/core" dataSource="#mysql-db" createTablesOnStartup="true" dataDirectory="${activemq.data}" cleanupPeriod="0"/>
        </persistenceAdapter>

从配置文件示例中也能找到,具体标签不多说了。

  • dataSource:数据源
  • createTablesOnStartup:自动建表,第一次启动true,如果(后续启动)存在请关闭。

表结构

  • activemq_acks
Field Type Null Key Default description
CONTAINER varchar(250) NO PRI NULL Destination
SUB_DEST varchar(250) YES NULL 订阅集群
CLIENT_ID varchar(250) NO PRI NULL 订阅者ID
SUB_NAME varchar(250) NO PRI NULL 订阅者名称
SELECTOR varchar(250) YES NULL 选择器,可自定义
LAST_ACKED_ID bigint(20) YES NULL 消费过的ID
PRIORITY bigint(20) NO PRI 5 优先级,0-9,越大越高
XID varchar(250) YES PRI NULL
  • activemq_lock
Field Type Null Key Default Extradescription
ID bigint(20) NO PRI NULL ID
TIME bigint(20) YES NULL TIME
BROKER_NAME varchar(250) YES NULL NAME
  • activemq_msgs
Field Type Null Key Default description
ID bigint(20) NO PRI NULL ID
CONTAINER varchar(250) YES MUL NULL Destination
MSGID_PROD varchar(250) YES MUL NULL 客户端主键
MSGID_SEQ bigint(20) YES NULL 消息发送顺序
MSGID_PROD+MSGID_SEQ=Message_ID
EXPIRATION bigint(20) YES MUL NULL 过期时间点,19700101-now(ms)
MSG longblob YES NULL 二进制序列化数据
PRIORITY bigint(20) YES MUL NULL 优先级,0-9,越大越高
XID varchar(250) YES MUL NULL

ActiveMQ-存储策略