ActiveMQ提供了一个插件式的消息存储,主要实现如下几种存储:
1)KahaDB消息存储-默认的消息存储形式,以文件数据库的形式存储(5.3以上采用)
配置方法如下:
在activemq.xml文件中添加以下内容:
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
2)JDBC消息存储-消息基于JDBC存储的。
消息保存于关系型数据库中,支持所有商业及开源的关系型数据库.
存储的性能较KahaDB差,但数据恢复的能力较强。
以mysql数据库为例,配置方法如下:
配置jdbc持久化适配器
<persistenceAdapter>
<jdbcPersistenceAdapter dataDirectory="${activemq.data}" dataSource="#mysql-ds"/>
</persistenceAdapter>
配置mysql数据源
<!-- MySql DataSource Sample Setup -->
<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="root"/>
<property name="password" value="root"/>
<property name="maxActive" value="200"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
提示:配置完后记得将jdbc数据库连接所需要的jar包放入到${ACTIVEMQ_HOME}/lib/optional/目录下。
因为我用的是mysql的jdbc数据库连接,数据库连接池为dbcp,
所以需要导入以下包:
mysql-connector-java-5.1.6-bin.jar
commons-dbcp-1.2.1.jar
配置完后启动activeMQ服务器,即会在mysql数据库中创建存储需要的数据库表。
3)Memory 消息存储-基于内存的消息存储。
消息直接存储在内存中,存储性能最高,但有个致命的问题就是activeMQ中间件出错后消息会丢失。
适用于对存储性能要求高但对能接受消息丢失情况的。
配置方法如下:
<broker persistent="false">
<persistenceAdapter>
<memoryPersistenceAdapter/>
</persistenceAdapter>
</broker>