ActiveMQ的消息存储持久化(四)
JDBC持久化消息
ActiveMQ支持使用JDBC来持久化消息,预定义的表如下:
1.消息表,缺省表名为ACTIVEMQ_MSGS,queue和topic都存在里面,结构如下:
2.ACTIVEMQ_ACKS表存储持久订阅的信息和最后一个持久订阅接收的消息ID,结构如下:
3.锁定表,缺省表名为ACTIVEMQ_LOCK,用来确保在某一时刻只能有一个ActiveMQ broker实例来访问数据库 ,结构如下:
使用JDBC来持久化消息的配置示例
<beans>
<broker brokerName="test-broker" persistent=true
xmlns="http://activemq.apache.org/schema/core">
<persistenceAdapter>
<jdbcPersistenceAdapter dataSource=“#mysql-ds"/>
</persistenceAdapter>
</broker>
<bean name="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-
method="close">
<property name="driverClassName"><value>org.gjt.mm.mysql.Driver</value></property>
<property name="url"><value>jdbc:mysql://192.168.1.100:3306/test?
useUnicode=true&characterEncoding=UTF-8</value></property>
<property name="username"> <value>root</value> </property>
<property name="password" value="cc"/>
</bean>
JDBC Message Store with ActiveMQ Journal
这种方式克服了JDBC Store的不足,使用快速的缓存写入技术,大大提高了性能。 配置示例如下:
<beans>
<broker brokerName="test-broker" xmlns="http://activemq.apache.org/schema/core">
<persistenceFactory>
<journalPersistenceAdapterFactory
journalLogFiles="4"
journalLogFileSize="32768"
useJournal="true"
useQuickJournal="true"
dataSource="#derby-ds"
dataDirectory="activemq-data" />
</persistenceFactory>
</broker>
</beans>
JDBC Store和JDBC Message Store with ActiveMQ Journal的区别
- Jdbc with journal的性能优于jdbc。
- Jdbc用于master/slave模式的数据库分享。
- Jdbc with journal不能用于master/slave模式。
- 一般情况下,推荐使用jdbc with journal。