ActiveMQ的持久化方式

本文介绍了ActiveMQ的四种持久化方式:AMQ、KahaDB、JDBC和LevelDB,并详细解析了各自的配置方法和特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ActiveMQ持久化方式:AMQ、KahaDB、JDBC、LevelDB。

1、AMQ

AMQ是一种文件存储形式,它具有写入速度快和容易恢复的特点。消息存储在一个个文件中,文件的默认大小为32M,如果一条消息的大小超过了32M,那么这个值必须设置大一点。当一个存储文件中的消息已经全部被消费,那么这个文件将被标识为可删除,在下一个清除阶段,这个文件被删除。AMQ适用于ActiveMQ5.3之前的版本。默认配置如下:

1

2

3

<persistenceAdapter>

   <amqPersistenceAdapter directory="activemq-data"maxFileLength="32mb"/>

</persistenceAdapter>

2、KahaDB

KahaDB是基于文件的本地数据库储存形式,虽然没有AMQ的速度快,但是它具有强扩展性,恢复的时间比AMQ短,从5.4版本之后KahaDB做为默认的持久化方式。默认配置如下:

1

2

3

<persistenceAdapter>

   <kahaDB directory="activemq-data"journalMaxFileLength="32mb"/>

</persistenceAdapter>

每个KahaDB的实例都可以配置单独的适配器,如果没有目标队列提交给filteredKahaDB,那么意味着对所有的队列有效。如果一个队列没有对应的适配器,那么将会抛出一个异常。配置如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<persistenceAdapter>

  <mKahaDBdirectory="${activemq.base}/data/kahadb">

    <filteredPersistenceAdapters>

      <!-- match all queues -->

      <filteredKahaDBqueue=">">

        <persistenceAdapter>

          <kahaDBjournalMaxFileLength="32mb"/>

        </persistenceAdapter>

      </filteredKahaDB>

      

      <!-- match all destinations -->

      <filteredKahaDB>

        <persistenceAdapter>

          <kahaDBenableJournalDiskSyncs="false"/>

        </persistenceAdapter>

      </filteredKahaDB>

    </filteredPersistenceAdapters>

  </mKahaDB>

</persistenceAdapter>

如果filteredKahaDB的perDestination属性设置为true,那么匹配的目标队列将会得到自己对应的KahaDB实例。配置如下:

1

2

3

4

5

6

7

8

9

10

11

12

<persistenceAdapter>

  <mKahaDBdirectory="${activemq.base}/data/kahadb">

    <filteredPersistenceAdapters>

      <!-- kahaDB per destinations -->

      <filteredKahaDB perDestination="true">

        <persistenceAdapter>

          <kahaDBjournalMaxFileLength="32mb" />

        </persistenceAdapter>

      </filteredKahaDB>

    </filteredPersistenceAdapters>

  </mKahaDB>

</persistenceAdapter>

3、JDBC

可以将消息存储到数据库中,例如:Mysql、SQL Server、Oracle、DB2。

配置JDBC适配器:

1

2

3

<persistenceAdapter>

    <jdbcPersistenceAdapterdataSource="#mysql-ds" createTablesOnStartup="false" />

</persistenceAdapter>

dataSource指定持久化数据库的bean,createTablesOnStartup是否在启动的时候创建数据表,默认值是true,这样每次启动都会去创建数据表了,一般是第一次启动的时候设置为true,之后改成false。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26  

27

28

29

30

31

32

33

34

<!--Mysql持久化bean:à -->

<bean id="mysql-ds" 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="activemq"/>

    <property name="password" value="activemq"/>

    <property name="poolPreparedStatements" value="true"/>

</bean>

<!-- SQL Server持久化bean:-->

<bean id="mssql-ds" class="net.sourceforge.jtds.jdbcx.JtdsDataSource" destroy-method="close">

   <property name="serverName" value="SERVERNAME"/>

   <property name="portNumber" value="PORTNUMBER"/>

   <property name="databaseName" value="DATABASENAME"/>

   <property name="user" value="USER"/>

   <property name="password" value="PASSWORD"/>

</bean>

<!-- Oracle持久化bean:-->

<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:@10.53.132.47:1521:activemq"/>

    <property name="username" value="activemq"/>

    <property name="password" value="activemq"/>

    <property name="maxActive" value="200"/>

    <property name="poolPreparedStatements" value="true"/>

</bean>

<!-- DB2持久化bean:-->

<bean id="db2-ds" class="org.apache.commons.dbcp.BasicDataSource"  destroy-method="close">

      <property name="driverClassName" value="com.ibm.db2.jcc.DB2Driver"/>

      <property name="url" value="jdbc:db2://hndb02.bf.ctc.com:50002/activemq"/>

      <property name="username" value="activemq"/>

      <property name="password" value="activemq"/>

      <property name="maxActive" value="200"/>

      <property name="poolPreparedStatements" value="true"/>

  </bean>

 

4、LevelDB

这种文件系统是从ActiveMQ5.8之后引进的,它和KahaDB非常相似,也是基于文件的本地数据库储存形式,但是它提供比KahaDB更快的持久性。与KahaDB不同的是,它不是使用传统的B-树来实现对日志数据的提前写,而是使用基于索引的LevelDB。默认配置如下:

 

1

2

3

<persistenceAdapter>

      <levelDBdirectory="activemq-data"/>

</persistenceAdapter>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值