持久化消息主要是指:MQ所在的服务器宕机了,消息不会丢失的机制。
持久化机制演化过程:
从最初的AMQ Message Store方案到ActiveMQ V4版本中推出的High performance journal(高性能事务支持)附件,并且同步推出了关于关系型数据库的存储方案。ActiveMQ 5.3版本中又推出了对KahaDB的支持(V 5.4版本后称为ActiveMQ默认的持久化方案),后来ActiveMQ V 5.8版本开始支持LevelDB,到现在V 5.9+提供了标准的Zookeeper+LevelDB集群化方案,重点了解KahaDB、LevelDB和MySQL数据库这三种持久化存储方案。
ActiveMQ的消息持久化机制有:
AMQ | 基于日志文件 |
KahaDB | 基于日志文件,从ActiveMQ 5.4开始默认的持久化插件 |
JDBC | 基于第三方数据库 |
LevelDB | 基于文件的本地数据库存储,从ActiveMQ 5.8后退出了LevelDB持久化引擎,性能高于KahaDB |
Replicated LevelDB Store | 从ActiveMQ 5.9提供了基于LevelDB和Zookeeper的数据复制方式,用于Master-slaver方式的首选数据复制方案。 |
无论使用哪种持久化方式,消息存储的逻辑是一致的。在消息发送后,消息中心先将消息存储到本地数据文件、内存数据库或远程数据库等,然后试图将消息发送给接收者,发送成功则将消息从存储中删除,失败则继续重试。消息中心启动后先检查指定的存储位置,如果有未发送成功的消息,需要先将消息发送出去。