九、ActiveMQ的消息存储和持久化(重要啊啊啊啊!!!)
1、官网:http://activemq.apache.org/persistence
2、是什么?
为了避免意外宕机以后丢失消息,需要做到重启后可以恢复消息队列,消息系统一般都会采取持久化机制
ActiveMQ的消息持久化机制有AMQ,JDBC,KahaDB 和 levelDB,无论采取哪种持久化方式,消息的存储逻辑都是一致的
在发送者将消息发送出去后,消息中心首先将消息存储到本地数据文件,内存数据库或者远程数据库等,再试图将消息发送给接收者,成功则将消息从存储中删除,失败则继续尝试发送
消息中心启动以后首选要检查指定的存储位置,如果有未发送成功的消息,则需要将消息发送出去
3、有哪些存储方式
1)AMQ message store
AMQ是一种文件存储形式,它具有读写速度快和容易恢复的特点。消息存储在一个文件中,文件的默认大小为32M,当一个存储文件中的消息已经全部被消费,那么这个文件则被标识为可删除,在下一个清除阶段,这个文件将被删除。AMQ适用于 ActiveMQ5.3之前的版本
2)kahaDB消息存储
基于日志文件,从ActiveMQ5.4开始的默认的持久化插件
验证:
activemq.xml文件中:
<persistenceAdapter> <kahaDB directory="${activemq.data}/kahadb"/> </persistenceAdapter>
image.jpeg
kahaDB的存储原理:
KahaDB是目前默认的存储方式,可用于任何场景,提高了性能和恢复能力
消息存储使用了一个事务日志和一个索引文件存储消息所有的地址
KahaDB是一个专门针对消息持久化的解决方案
数据被追加到data logs中,当不再需要log文件中数据的时候,log文件会被丢弃
image.jpeg image.jpeg3)JDBC消息存储(真实的存储到数据库中)
4)LevelDB 消息存储
image.jpeg5)JDBC Message Store With ActiveMQ Journal
4、JDBC消息存储
1、MQ+MySql
image.jpeg2、添加mysql数据库的驱动包到activeMQ下的lib文件夹
image.jpeg3、 jdbcPersistenceAdapter配置
image.jpeg修改配置文件activemq.xml。将之前的替换为jdbc的配置。如下:
<!--
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
-->
<persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#mysql-ds" />
</persistenceAdapter>
4、 数据库连接池配置
在activemq.xml 配置文件 标签和<import>标签之间插入数据库连接池配置</import>
格式:
image.jpeg我的配置:(按照自己的需要填写)
<bean id="mysql-ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.56.1:3306/activemq?relaxAutoCommit=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
image.jpeg
5、 建库SQL和创表说明
1)建立一个名为activemq的数据库
image.jpeg2)三张表的说明
image.jpegACTIVEMQ_MSGS:
image.jpeg6、代码运行验证
一定要开启持久化:
messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);
7、数据库情况
8、总结
image.jpeg9、开发中的常见问题
image.jpeg10.6 总结
① jdbc效率低,kahaDB效率高,jdbc+Journal效率较高。
② 持久化消息主要指的是:MQ所在服务器宕机了消息不会丢试的机制。
③ 持久化机制演变的过程:
从最初的AMQ Message Store方案到ActiveMQ V4版本退出的High Performance Journal(高性能事务支持)附件,并且同步推出了关于关系型数据库的存储方案。ActiveMQ5.3版本又推出了对KahaDB的支持(5.4版本后被作为默认的持久化方案),后来ActiveMQ 5.8版本开始支持LevelDB,到现在5.9提供了标准的Zookeeper+LevelDB集群化方案。
④ ActiveMQ消息持久化机制有:
AMQ 基于日志文件
KahaDB 基于日志文件,从ActiveMQ5.4开始默认使用
JDBC 基于第三方数据库
Replicated LevelDB Store 从5.9开始提供了LevelDB和Zookeeper的数据复制方法,用于Master-slave方式的首选数据复制方案。
网友评论