持久化的目的是用来保证消息可靠性的方法。发送端的消息发送完毕之后即使接收者不是在线或者消息中心宕机重启之后仍然可以把消息发送到消费端。
activeMQ
支持以下几种持久方式。
kahaDB
默认的存储方式
在配置文件activemq.xml
中有如下配置段,默认的是kahaDB
存储。存储路径是activemq
的data
目录下的kahadb
<!--
Configure message persistence for the broker. The default persistence
mechanism is the KahaDB store (identified by the kahaDB tag).
For more information, see:
http://activemq.apache.org/persistence.html
-->
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
AMQ
基于文件的存储方式
AMQ
存储方式特点就是:写入速度很快,容易恢复。默认大小是32M
JDBC
基于数据库的存储
在数据量和性能要求不是特别高的场景下可以使用数据库存储。
-
配置持久化存储适配器
指定使用
jdbc
适配器作为activemq
的持久化存储适配器。创建使用的数据库bean
-
添加
jar
包到lib
目录下- commons-dbcp
- commons-pool
- mysql-connector-java
根据使用的版本号添加对应的
jar
包
<persistenceAdapter>
<!--
<kahaDB directory="${activemq.data}/kahadb"/>
-->
<jdbcPersistenceAdapter dataSource="#mysqlDataSource" createTablesOnStartup="true" />
</persistenceAdapter>
<bean id="mysqlDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/shiro" />
<property name="username" value="root"/>
<property name="password" value="12345678"/>
</bean>
启动broker
之后是否进行默认的数据库的表的创建,默认是false
。
启动之后查看数据库。
ACTIVEMQ_ACKS
:存储持久订阅的信息ACTIVEMQ_LOCK
:锁表(用来做集群的时候,实现master选举的表)ACTIVEMQ_MSGS
:消息表
上面的jdbc
方式,消息的发送及消费都需要操作数据库。当数据流量大的时候,整个的瓶颈就变成了数据库的瓶颈。因此基于jdbc
的方式还有另一种方式。
JDBC Message store with activeMQ journal
该方式,当消费者消费较快时,对于消息不会入库,直接经过缓存。
- 引入了快速缓存机制
- 性能比
jdbc
好 - 该方式不能应用于master/slave模式
Memory
基于内存的存储
基于内存的存储
LevelDB
5.8
版本之后提供的一种持久化策略,通常用于集群配置。