为了防止系统意外down机丢失消息,同时能在系统恢复后能重新发送原来未发送的消息。一般消息系统都会采用持久化机制。Activemq5.4提供了几种持久化机制:
1、KahaDB message store
2、Journaled JDBC adapter
3、Non-journaled JDBC adapter
为了保持后向兼容性,Activemq5.4同样提供以前版本中的持久化机制。例如:AMQ message store以及 Kaha persistence adapter。5.4中默认的采用KahaDB,KahaDB是一种可嵌入式的事务性的持久化机制。要启用或禁用持久化可以通过配置文件中的broker标签中的persistent属性设置
<broker persistent="false" ...>
...
</broker>
true : 启用持久化
false : 禁用持久化,即便是在配置文件中配置了persistence adapter。
修改配置文件中的persistenceAdapter或者persistenceFactory可以修改Activemq提供的默认机制。具体可以查看后面的配置文件。
下面详细介绍KahaDB,主要特性有:
1、日志形式存储消息。
2、消息索引以B-Tree结构存储,可以快速更新
3、完全支持JMS事务
4、支持多种恢复机制
下面是KahaDB的一段简短配置:
<broker brokerName="broker" persistent="true" useShutdownHook="false">
...
<persistenceAdapter>
<kahaDB directory="activemq-data" journalMaxFileLength="32mb"/>
</persistenceAdapter>
</broker>
directory : 指定持久化消息的存储目录
journalMaxFileLength : 指定保存消息的日志文件大小,具体根据你的实际应用配置
上图展示的是KahaDB的结构图。消息存储在基于文件的数据日志中。如果消息发送成功,变标记为可删除的。系统会周期性的清除或者归档日志文件。消息文件的位置索引存储在内存中,这样能快速定位到。定期将内存中的消息索引保存到metadata store中,避免大量消息未发送时,消息索引占用过多内存空间。
Data logs
数据日志中保存着消息以及目的地、订阅、事务等相关信息。这些信息在日志文件中并未按照一个特定的格式来保存,所以就需要索引各类信息,以便能快速定位到。
Metadata cache
在内存中保存日志文件中各类信息的索引,索引信息包含一个MessageId与消息在日志文件中的偏移量的对应关系。所有索引以B-Tree结构存在内存中,便于在一个有序的list上快速的查找,插入以及删除。内存中的消息索引会定期的保存到Metadata store中。具体时间周期可以设置checkpointInterval属性。理想情况下Metadata cache越大愈好,这样在定位消息的时候就不尽量少的去Metadata store中获取索引了。实际可以参考db.data文件的大小来设置。indexCacheSize 便是设置缓存的大小。
Metadata store
在db.data文件中保存消息日志中消息的元数据,也是以B-Tree结构存储的,定时从Metadata cache更新数据。同时,Metadata store中也会备份一些在消息日志中存在的信息,这样可以让Broker实例快速启动。即便metadata store文件被破坏或者误删除了。broker可以读取Data logs恢复过来,只是速度会相对较慢些。
Metadata cache与Metadata store同步
KahaDB提供了两种触发同步设置
1、设定一个阀值,当Metadata cache与Metadata store中的索引不同的数量达到这个阀值时,触发同步。indexWriteBatchSize
便是设置这个阀值。
2、设置一个时间周期,当时间周期到了后,不管Metadata cache与Metadata store是否不同,都触发同步。
通过checkpointInterval设置一个时间周期。
通常为了达到更高的性能,会将indexWriteBatchSize值设置很大。只在到达checkpointInterval时间点时才同步。这样做的风险就是有可能在系统意外down机时丢失部分metadata信息。
- 大小: 20.6 KB
分享到:
相关推荐
ActiveMQ配置Mysql8为持久化方式所需Jar包
activemq消息持久化所需Jar包,详情请参见博文:http://blog.csdn.net/l1028386804/article/details/68997105
一个订阅通道,支持多个客户端监听,当某个客户端掉线后,再上线的时候可以收到它没有接收到的消息。
spring +activemq topic消息持久化订阅实例,整个项目中有activemq和spring的整合的所有实例,topic的持久化配置是在ApplicationContext3C、ApplicationContext3C2以及ApplicationContext3P三个中,消息生产者:...
NULL 博文链接:https://showlike.iteye.com/blog/2000117
在网上找了很多的topic持久化的Demo做了很多的测试,现把熟肉呈上。
本人在学习activemq,然后 测试完成的demo, 包含了queue,topic,持久化到mysql,订阅模式,包好用
activemq-5.15.15 JDBC持久化mysql8.0+的activemq.xml
activemq消息持久化所需Jar包,亲测可用https://blog.csdn.net/weixin_42109071/article/details/91349406
该文档详细描述了linux环境下的 Activemq 持久化、集群环境的搭建步骤,以及测试步骤
本篇文章记录centos6下ActiveMQ+Zookeeper消息中间件集群-完整部署过程,讲解十分详细,本人线上实操手册。在此分享出来,希望能帮助到有用到的朋友。
ActiveMQ的持久化(数据库)[归类].pdf
可用于调试MSMQ、RabbitMQ、ActiveMQ三种消息队列 其中MSMQ支持Active、Binary、XML格式(要勾选事务) RabbitMQ支持逐条接发、批量接发、RPC回调模式、新建队列、建立持久化队列、连接测试等功能。
主要介绍了ActiveMQ持久化机制代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
JMS简明教程+JMS规范教程+activemq以及activemq和tomcat的整合+整合实例代码+持久化消息配置以及工程+tomcat服务器的配置+整合需要的lib文件+部署多个tomcat服务器方案等
⒉ 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务) ⒊ 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性 ⒋ 通过了常见J2EE服务器(如 Geronimo,JBoss 4,...
——学习参考资料:仅用于个人学习使用! 本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及侵权,请联系,会尽快处理! 未进行详尽测试,请自行调试!
一、JMS基本概念 二、activemq介绍及安装 1、消息中间件简介 2、activemq 2.1、activemq简介 2.2、activemq下载 2.3、运行activemq服务 2.4、测试 2.5、监控 3、activemq特性 ...5.3 activemq 持久化机制
集成activemq和spring 的消息推送 包含普通队列消息和持久化订阅消息
自己写的ActiveMQ简单demo,包括生产者、消费者之间发送消息、持久化到文件和持久化到数据库,期中持久化需要修改activemq.xml文件