ActiveMQ默认开启持久化,使用自带的文件数据库kahadb。
启用mysql持久化需要修改配置文件 \conf\activemq.xml。修改内容如下:
(1)添加数据库连接的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="maxActive" value="200"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
同时要创建数据库activemq,数据库名称与jdbc:mysql://localhost/activemq?relaxAutoCommit=true中的保持一致即可。另外需要将相应的数据库连接驱动jar包放在ActiveMQ的安装目录的lib文件夹中。
(2)修改持久化方式persistenceAdapter
<persistenceAdapter>
<!-- <kahaDB directory="${activemq.data}/kahadb"/> -->
<jdbcPersistenceAdapter dataSource="#mysql-ds" createTablesOnStartup="true" />
</persistenceAdapter>
配置createTablesOnStartup设置为true的话,ActiveMQ在启用时会自动在数据库中创建3个数据库表(数据库表不存在的情况下),用于持久化消息。
- activemq_msgs:queue和topic的消息都存在这个表中
- activemq_acks:存储持久订阅的信息和最后一个持久订阅接收的消息ID
- activemq_lock:跟kahadb的lock文件类似,确保数据库在某一时刻只有一个broker在访问