activemq持久化的几种方式详解

主要有jdbc kahadb leveldb+zookeeper几种持久化方式
1.jdbc:
jdbc比如借助mysql,需要在actviemq.xml配置(<PersistenceAdapter>),
<persistenceAdapter> 
      <jdbcPersistenceAdapter dataSource="#mysql-ds" createTableOnStartup="true"/>
</persistenceAdapter>
然后在broker也得配置
  </broker>
    <bean id="mysql-ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://mysql数据库URL/activemq?relaxAutoCommit=true"/>
        <property name="username" value="mysql数据库用户名"/>
        <property name="password" value="mysql数据库密码"/>
        <property name="poolPreparedStatements" value="true"/>
    </bean>
    <import resource="jetty.xml"/>会产生三个表,ACTIVEMQ_MSGS,存储消息信息的(比如消息目的地,消息的过期时间,消息发送者的id,消息优先级等),ACTIVEMQ_ACKS,存储订阅者与服务器的关系的(消息的目的地,订阅者名称等),ACTIVEMQ_LOCK,集群环境下才用到,记录谁是主服务器的。
kahadb,基于日志文件,类似于redis的aof持久化,
   <persistenceAdapter>
         <kahaDB directory="${activemq.data}/kahadb"/>
   </persistenceAdapter>
 
2.kahadb:
kahadb的消息存储目录只有四个文件和一个lock,db-<number>.log,存储消息信息的,当一个log文件放满时,会自动生成下一个,number+1,
db.data,存储持久化的b树索引,索引了在上一个文件里存储的消息
db.free,存储了db.data,中哪些页是空白的,具体内容是空白页的id。
db.redo,用于恢复db.data的b树索引
lock,记录了当前获得kahadb的读写权限的服务器

猜你喜欢

转载自www.cnblogs.com/wl889490/p/12911527.html