《RocketMQ 官网》阅读笔记 RocketMQ 订阅 (Subscription) 《RocketMQ 官网》阅读笔记 RocketMQ 订阅 (Subscription)订阅 (Subscription)定义订阅是 Apache RocketMQ 中消费者获取和处理消息的规则与状态设置。订阅由消费者组动态注册到服务端Broker。消息会根据订阅中定义的过滤规则进行匹配和消费。通过配置订阅您可以控制以下消息行为消息过滤规则这些规则用于定义消费者消费主题Topic中的哪些消息。通过配置消息过滤规则消费者可以有效地获取所需的消息并根据不同的业务场景指定消息接收范围。消费状态默认情况下Apache RocketMQ 服务端提供持久化订阅。也就是说在消费者组订阅了某个服务端后即使组内的消费者重新连接它们也可以从上次停止消费的位置继续消费消息。订阅的判定规则Apache RocketMQ 的订阅基于消费者组和主题进行设计。因此订阅是指特定的消费者组对某个主题的订阅。以下描述了订阅的判定规则模型关系下图展示了订阅在 Apache RocketMQ 领域模型中的位置。内部属性过滤类型消息过滤规则的类型。为订阅设置消息过滤规则后系统会根据该规则匹配主题中的消息。只有满足条件的消息才会投递给 消费者。此功能可帮助您根据需求对发送给消费者的消息进行分类。Tag 过滤基于标签字符串进行全文本过滤和匹配。SQL92 过滤基于 SQL 语法对消息属性进行过滤和匹配。过滤表达式自定义过滤规则的表达式。https://rocketmq.apache.ac.cn/docs/featureBehavior/07messagefilter/行为约束订阅一致性Apache RocketMQ 基于消费者组管理订阅。因此同一个消费者组内的消费者必须保持相同的消费逻辑。否则会发生消费冲突进而导致部分消息被错误地消费。正确示例//Consumer c1Consumerc1ConsumerBuilder.build(groupA);c1.subscribe(topicA,TagA);//Consumer c2Consumerc2ConsumerBuilder.build(groupA);c2.subscribe(topicA,TagA);错误示例//Consumer c1Consumerc1ConsumerBuilder.build(groupA);c1.subscribe(topicA,TagA);//Consumer c2Consumerc2ConsumerBuilder.build(groupA);c2.subscribe(topicA,TagB);使用说明请勿频繁修改订阅。在 Apache RocketMQ 中订阅与元数据以及过滤规则、消费进度等配置相关联。系统必须确保消费者组中所有消费者的消费行为、消费逻辑和负载策略保持一致。这些因素导致需要管理的关系网络非常复杂。因此我们建议不要在生产环境中频繁修改订阅以变更业务逻辑。否则客户端需要不断调整负载分布这会导致消息接收问题。