《RocketMQ 官网》阅读笔记 RocketMQ 订阅 (Subscription)

《RocketMQ 官网》阅读笔记 RocketMQ 订阅 (Subscription)

订阅 (Subscription)

定义

订阅是 Apache RocketMQ 中消费者获取和处理消息的规则与状态设置。

订阅由消费者组动态注册到服务端(Broker)。消息会根据订阅中定义的过滤规则进行匹配和消费。

通过配置订阅,您可以控制以下消息行为:

  • 消息过滤规则:这些规则用于定义消费者消费主题(Topic)中的哪些消息。通过配置消息过滤规则,消费者可以有效地获取所需的消息,并根据不同的业务场景指定消息接收范围。
  • 消费状态:默认情况下,Apache RocketMQ 服务端提供持久化订阅。也就是说,在消费者组订阅了某个服务端后,即使组内的消费者重新连接,它们也可以从上次停止消费的位置继续消费消息。

订阅的判定规则

Apache RocketMQ 的订阅基于消费者组和主题进行设计。因此,订阅是指特定的消费者组对某个主题的订阅。以下描述了订阅的判定规则:

模型关系

下图展示了订阅在 Apache RocketMQ 领域模型中的位置。

内部属性

过滤类型

消息过滤规则的类型。为订阅设置消息过滤规则后,系统会根据该规则匹配主题中的消息。只有满足条件的消息才会投递给 消费者。此功能可帮助您根据需求对发送给消费者的消息进行分类。

  • Tag 过滤:基于标签字符串进行全文本过滤和匹配。
  • SQL92 过滤:基于 SQL 语法对消息属性进行过滤和匹配。

过滤表达式

行为约束

订阅一致性

Apache RocketMQ 基于消费者组管理订阅。因此,同一个消费者组内的消费者必须保持相同的消费逻辑。否则,会发生消费冲突,进而导致部分消息被错误地消费。

正确示例

java 复制代码
//Consumer c1
Consumer c1 = ConsumerBuilder.build(groupA);
c1.subscribe(topicA,"TagA");
//Consumer c2
Consumer c2 = ConsumerBuilder.build(groupA);
c2.subscribe(topicA,"TagA");

错误示例

java 复制代码
//Consumer c1
Consumer c1 = ConsumerBuilder.build(groupA);
c1.subscribe(topicA,"TagA");
//Consumer c2Consumer 
c2 = ConsumerBuilder.build(groupA);
c2.subscribe(topicA,"TagB");

使用说明

请勿频繁修改订阅。

在 Apache RocketMQ 中,订阅与元数据以及过滤规则、消费进度等配置相关联。系统必须确保消费者组中所有消费者的消费行为、消费逻辑和负载策略保持一致。这些因素导致需要管理的关系网络非常复杂。因此,我们建议不要在生产环境中频繁修改订阅以变更业务逻辑。否则,客户端需要不断调整负载分布,这会导致消息接收问题。

相关推荐
青山木6 分钟前
RocketMQ 入门到原理(一):整体架构与消息的生命周期
java·分布式·后端·中间件·架构·rocketmq
沪上企服通22 分钟前
旧账系统的信创迁移工程:从 MySQL/Oracle 到国产库、国密与电子会计档案闭环
数据库·笔记·数据库架构
三岁就很~酷~1 小时前
ai agent自学 基础命令和上下文监控(9/17)
笔记
彧azz2 小时前
Java学习记录:判断语句
java·笔记·学习·算法
hanlin032 小时前
刷题笔记:力扣第560题-和为k的子数组
笔记·算法·leetcode
摇滚侠2 小时前
《Spring Boot 3:高级与架构设计》第 1 章 元编程与元信息 个人理解 1
java·spring boot·笔记·后端
志尊宝2 小时前
Vue3 零基础每日笔记(046):声明式导航与编程式导航——useRouter / useRoute 双子星
vue.js·笔记·#vue #前端 #前端开发·#javascript·#vue.js
M78佐菲3 小时前
ARM学习笔记(四)
linux·arm开发·笔记·嵌入式硬件·学习
kkkkkkkkkk_Z3 小时前
单片机|学习日记:单片机底层架构与寄存器操作全解析
linux·笔记·单片机·学习·51单片机
CAYA-17 小时前
模电笔记1.1 半导体基础与 PN 结
经验分享·笔记·学习方法