JMS学习(三)ActiveMQ Message Persistence

简介:

1,JMS规范支持两种类型的消息传递:persistent and non-persistent。ActiveMQ在支持这两种类型的传递方式时,还支持消息的恢复、中间状态的消息(message are cached in memory)

2,ActiveMQ可将消息存储在三种类型介质中:file-based(存储在文件中)、in-memory(存储在内存中)、relational databases(存储在关系数据库中)

 

3,Persistence Message有何用处?

Persistent messages are ideal if you want messages to always be available to a message consumer after they have been delivered to a message broker, or you need messages to survive even if there has been a system failure。

①消息对消费者总是可用。②系统宕机后,消息不被丢失。

4,ActiveMQ中存储两种Destination,主题(Topic)与 队列(Queue)。主题对应的Domain是发布-订阅模型(Pub/Sub),队列对应的Domain是点对点模型(P2P)。

队列存储:按FIFO的顺序存储消息,Only one message is dispatched between one of potentially many consumers. Only when that message has been consumed and acknowledged can it be deleted from the broker's message store.

对于众多的消费者,只有其中一个消费者可以接收该消息。也只有当消费者消费了之后,该消息才能删除。

 

Topic存储:

For durable subscribers to a topic, each consumer gets a copy of the message. In order to save space (some messages can be very large!), only one copy of a message is stored by the broker.

什么是durable subscribers(持久订阅者)?对于 durable subscribers而言,尽管当前它是不活跃的(没有连接到borker),也不会错失发给broker的消息(类似于QQ的离线消息)。持久订阅者维护者一个消息指针,指针总是指向该订阅者需要的下一个消息。

A durable subscriber object in the store maintains a pointer to its next stored message and dispatches a copy of it to its consumer as shown in Figure 5.2.

 

为什么要这样设计?

①每个消费者消费速率是不同的

②不是所有的消费者都在线(actived)

③同一个消息可能被多个消费者订阅

通过指针这种形式,可以很好地解决上面三种情况下出现的问题。只有当所有的消费者都获得了该消息时,消息才能从broker中删除。

 

5,ActiveMQ中消息存储的方式:

ActiveMQ provides a pluggable API for message stores as well as multiple message store implementations including:

①AMQ Message Store

②KahaDB Message Store,ActiveMQ 5.13.2版本默认的存储方式

③JDBC Message Store

在配置文件activemq.xml中有存储方式的配置选项:

 

AMQ存储方式的实现思想非常值得一看:

 

The Journal consists of a rolling log of messages and commands (such as transactional boundaries and message deletions) stored in data files of a certain length. When the maximum length of the currently used data file has been reached a new data file is created. All the messages in a data file are reference counted, so that once every message in that data file is no longer required, the data file can be removed or archived. The journal only appends messages to the end of the current data file, so storage is very fast.

存储Journal的文件是定长的,并且只以append方式向文件写入日志。

为了方便,直接截图了。

 

 

 

KahaDB 消息存储方式就不截图了。AMQ方式采用HashTable存储Reference Index,而KahaDB采用B-Tree存储索引。

此外,关于配置ActiveMQ使用JDBC作为持久存储的方法,参考这篇文章

 

6,Broker为Consumer缓存消息

由于第5点中讲到,消息存储到持久介质(采用了持久传输模式)中,因此就不适用那些需要实时消息的场合。---比如,交易信息需要在秒级时间内获得,用完之后就不再需要它了。

因此,ActiveMQ可以配置缓存哪种类型的消息、缓存多少消息、这些消息缓存多久?

Messages that are cached by the broker are only dispatched to a topic consumer if it is retroactive; and never to durable topic subscribers 


本文转自hapjin博客园博客,原文链接:http://www.cnblogs.com/hapjin/p/5438377.html,如需转载请自行联系原作者

相关文章
|
12月前
|
关系型数据库 Linux API
小白如何免费建站?
本文给大家推荐一套免费建站系统(PageAdmin)给大家,它将为您提供简单易用的工具和模板,帮助迅速搭建自己的网站。PageAdmin CMS建站系统是一套使用率极高的免费建站系统,开发时间长,提供丰富的功能插件,多主题的网站模版,尤其适合政务单位、学校单位、企业业务网站和个人网站,后台提供了一个强大的内容管理系统,易于操作的编辑器,从而轻松添加和编辑内容,及发布信息。PageAdmin CMS能满足基本的建站需求,精致的模版、高质量的建站后台,能帮助用户快速建站,获得更多精准流量。
258 5
|
Web App开发 安全 中间件
谷歌、火狐、Edge等浏览器如何使用ActiveX控件
allWebPlugin 是一款为用户提供安全、可靠且便捷的浏览器插件服务的中间件产品,支持 Chrome、Firefox、Edge 和 360 等浏览器。其 V2.0.0.20 版本支持一个页面加载多个插件,并解决了插件与浏览器之间的焦点问题。用户可通过“信息化系统 + allWebPlugin + 插件 + 浏览器”的解决方案实现 ActiveX 插件的无缝集成。下载地址见文末,安装包含详细说明。
3353 119
|
弹性计算 语音技术
快速部署 ChatTTS 社区版
ChatTTS是专为对话场景设计的语音生成模型,特别适用于大型语言模型(LLM)助手的对话任务,以及诸如对话式音频和视频介绍等应用。它支持中文和英文,通过使用大约100,000小时的中文和英文数据进行训练,ChatTTS在语音合成中表现出高质量和自然度。本文介绍通过计算巢快速部署 ChatTTS 服务 。
快速部署 ChatTTS 社区版
|
机器学习/深度学习 自然语言处理 数据挖掘
从理论到实践:详解GraphRAG框架下的多模态内容理解与生成
【10月更文挑战第10天】随着多媒体内容的爆炸性增长,如何有效地理解和生成跨模态的数据(如图像、文本和视频)变得越来越重要。近年来,图神经网络(GNNs)因其在处理非结构化数据方面的强大能力而受到广泛关注。在此背景下,Graph Retrieval-Augmented Generation (GraphRAG) 框架作为一种新的方法,通过结合图检索和生成模型来提升多模态内容的理解与生成效果。本文将深入探讨GraphRAG的基本原理、核心组件以及实际应用,并通过代码示例展示其在多媒体内容处理中的潜力。
1726 0
|
自然语言处理 Kubernetes 监控
ChaosBlade:从混沌工程实验工具到混沌工程平台
ChaosBlade 是阿里巴巴 2019 年开源的混沌工程项目,已加入到 CNCF Sandbox 中。起初包含面向多环境、多语言的混沌工程实验工具 ChaosBlade,到现在发展到面向多集群、多环境、多语言的混沌工程平台 chaosblade-box,平台支持实验工具托管和工具自动化部署,通过统一用户实验界面,将用户的精力聚焦在通过混沌工程解决云原生过程中高可用问题上。本文从混沌实验模型抽象、混沌实验工具开源和混沌工程平台升级项目三阶段出发,详细介绍 ChaosBlade。
844 81
ChaosBlade:从混沌工程实验工具到混沌工程平台
|
缓存 数据可视化 小程序
低代码可视化-商品详情页面-代码生成器
低代码可视化-商品详情页面-代码生成器
130 0
|
存储 人工智能 自动驾驶
人工智能伦理:技术发展与道德责任的平衡
【8月更文挑战第13天】 在人工智能技术的飞速发展中,伦理问题逐渐成为不可忽视的重要议题。本文旨在探讨人工智能技术带来的伦理挑战、可能的解决途径以及未来展望。文章不提供代码示例,而是聚焦于AI技术背后的道德和社会责任,强调了在创新进程中维护人类价值观的重要性。
313 1
|
存储 C++
62字符串流
62字符串流
118 0
|
存储 前端开发 Java
IDEA+Java+JSP+Mysql+Tomcat实现Web图书管理系统(上)
IDEA+Java+JSP+Mysql+Tomcat实现Web图书管理系统
792 0
IDEA+Java+JSP+Mysql+Tomcat实现Web图书管理系统(上)
|
前端开发 IDE Java
科研人快速入门LaTex到日常使用,下载安装配置,语法使用说明等
科研人快速入门LaTex到日常使用,下载安装配置,语法使用说明等
4481 2
科研人快速入门LaTex到日常使用,下载安装配置,语法使用说明等