RocketMQ(二):领域模型(生产者、消费者)

1 生产者(Producer)

        本节介绍Apache RocketMQ 中生产者的定义、模型关系、内部属性、版本兼容和使用建议。

1.1 定义

        生产者是Apache RocketMQ 系统中用来构建并传输消息到服务端的运行实体。

        生产者通常被集成在业务系统中,将业务消息按照要求封装成Apache RocketMQ 的消息并发送值服务端。

        在消息生产者中,可以定义如下传输行为:

        1、发送方式:生产者可通过API接口设置消息发送的方式。Apache RocketMQ 支持同步和异步传输。        

        2、批量发送:生产者可以通过API接口设置消息批量传输的方式。例如,批量发送的消息条数或消息大小。

        3、事务行为:Apache RocketMQ 支持事务消息,对于事物消息需要生产者配合进行事务检查等行为保障事务的最终一致性。

        生产者和主题为多对多关系 ,即同一个生产者可以向多个主题发送消息,对于平台类场景如果需要发送消息到多个主题,并不需要创建多个生产者;同一个主题也可以接收多个生产者的消息,以此实现生产者性能的水平扩展和容灾。

1.2 模型关系

        在Apache RocketMQ 领域模型中,生产者的位置和流程如下:

        1、消息由生产者初始化并发送到Apache RocketMQ 服务端。

        2、消息按照达到Apache RocketMQ 服务端的顺序存储到主题的指定队列中。

        3、消费者按照指定的订阅关系从Apache RocketMQ 服务端中获取消息并消费。

1.3 内部属性

        客户端ID

                定义:生产者客户端的标识,用于区分不同的生产者。集群内全局唯一。

                取值:客户端ID由Apache RocketMQ 的SDK自动生成,主要用于日志查看,问题定位等运维场景,不支持修改。

        通信参数

                接入点信息(必选):链接服务端的接入地址,用于识别服务端集群。接入点必须按格式配置,建议使用域名,避免使用IP地址,防止节点变更无法进行热点迁移。

                身份认证信息(可选):客户端用于身份验证的凭证信息。仅在服务端开启身份识别和认证时需要传输。

                请求超时时间(可选):客户端网络请求调用的超时时间。

        预绑定主题列表

                定义:Apache RocketMQ 的生产者需要将消息发送到的目标主题列表,主要作用如下:

                1 事务消息(必须设置):事务消息场景下,生产者在故障、重启恢复时,需要检查事务消息的主题中是否有未提交的事务消息。避免生产者发送新消息后,主题中的旧事务消息一直处于未提交状态,造成业务延迟。

                2 非事务消息(建议设置):服务端会在生产者初始化时根据预绑定主题列表,检查目标主题的访问权限和合法性,而不需要等待应用启动后再检查。

                若未设置,或后续消息发送的目标主题动态变更,Apache RocketMQ 会对目标主题进行动态补充校验。

                约束:对于事务消息,预绑定列表必须设置,且需要和事务检查器一起配合使用。

        事务检查器

                定义:Apache RocketMQ 的事务消息机制中,为保证异常场景下事务的最终一致性,生产者需要主动实现事务检查器的接口。

                发送事务消息时,事务检查器必须设置,且需要和预绑定主题列表一起配合使用。

        发送重试策略

                定义:生产者在消息发送失败时的重试策略。

1.4 版本兼容性

        Apache RocketMQ 服务端5.x版本开始,生产者是匿名的,无需管理生产者分组(ProducerGroup);对于历史版本服务端3.x和4.x版本,已经使用的生产者分组可以废弃无需再设置,且不会对当前业务产生影响。

1.5 使用建议

        不建议单一进程创建大量生产者

        Apache RocketMQ 的生产者和主题是多对多关系,支持同一个生产者向多个主题发送消息。对于生产者的创建和初始化,建议遵循够用即可、最大化复用原则,如果有需哟发送消息到多个主题的场景,无需为每个主题都创建一个生产者。

        不建议频繁创建和销毁生产者

        Apache RocketMQ 的生产者是可以重复利用的底层资源,类似数据库的连接池。因此不需要每次发送消息时动态创建生产者,且在发送结束后销毁生产者。频繁的创建和销毁生产者会在服务端产生大量的短连接请求,严重影响系统性能。

2 消费者分组(ConsumerGroup)

        本节介绍Apache RocketMQ 中消费者分组(ConsumerGroup)的定义、模型关系、内部属性、行为约束、版本兼容及使用建议。

2.1 定义

        消费者分组是Apache RocketMQ 系统中承载多个消费者行为一致的消费者的负载均衡分组。和消费者不同,消费者分组并不是运行实体,而是一个逻辑资源。在Apache RocketMQ中,通过消费者分组内初始化多个消费者实现消费性能的水平扩展以及高可用容灾。

        在消费者分组中,统一定义以下消费行为,同一个分组下的多个消费者将按照分组内统一的消费行为和负载均衡策略消费信息。

        (1)订阅关系:Apache RocketMQ以消费者分组的粒度管理订阅关系,实现订阅关系的管理和追溯。

        (2)投递顺序性:Apache RocketMQ的服务端将消息投递给消费者消费时,支持顺序投递和并发投递,投递方式在消费者分组中统一配置。

        (3)消费重试策略:消费者消费信息失败的重试策略,包括重试次数、死信队列设置等。

2.2 模型关系

        在Apache RocketMQ的领域模型中,消费者分组的位置和流程如下:

      

        1、消息由生产者初始化并发送到Apache RocketMQ服务端。

        2、消息按照到达Apache RocketMQ服务端的顺序存储到主题的指定队列中。

        3、消费者按照指定的订阅关系从Apache RocketMQ服务端获取消息并消费。

2.3 内部属性

        消费者分组名称

        · 定义:消费者分组的名称,用于区分不同的消费者分组。集群内全局唯一。

        · 取值:消费者分组由用户设置并创建。

        投递顺序性

        · 定义:消费者消费消息时,Apache RocketMQ向消费者客户端投递消息的顺序。

                根据不同的消费场景,Apache RocketMQ提供顺序投递和并发投递两种方式。

        · 取值:默认投递方式是并发投递。

        消费重试策略

        · 定义:消费者消费消息失败时,系统的重试策略。消费者消费消息失败时,系统会按照重试策略,将指定消息投递给消费者重新消费。

        · 取值:重试策略包括:

                1、最大重试次数:表示消息可以被重新投递的最大次数,超过最大次数还没有被成功消费,消息讲被投递至死信队列或丢弃。

                2、重试间隔:Apache RocketMQ服务端重新投递消息的间隔时间。

        · 约束:重试间隔仅在PushConsumer消费类型下有效。

        订阅关系

        · 定义:当前消费者分组的订阅关系集合。包括消费者订阅的主题、以及消息的过滤规则。订阅关系由消费者动态注册到消费者分组中,Apache RocketMQ服务端会持久化订阅关系并匹配消息的消费进度。

2.4 行为约束

        在Apache RocketMQ领域模型中,消费者的管理通过消费者分组实现,同一分组内的消费者共同分摊消息进行消费。因此,为了保证分组内消息的正常负载和消费,Apache RocketMQ要求同一分组下的所有消费者以下消费行为保持一致。

        投递顺序和消费重试策略。

2.5 使用建议

        按照业务合理拆分分组

        Apache RocketMQ的消费者和主题是多对多的关系,对于消费者分组的拆分设计,建议遵循以下原则:

        1、消费者的投递顺序一致:同一消费者分组下所有消费者的消费投递顺序是相同的,统一都是顺序投递或并发投递,不同业务场景不能混用消费者分组。

        2、消费者业务类型一致:一般消费者分组和主题对应,不同业务领域对消息消费的要求不同,例如消息过滤属性、消费重试策略不同。因此,不同业务领域主题的消费建议使用不同的消费者分组,避免一个消费者分组消费超过10个主题。

        消费者分组管理尽量避免自动化机制

        在Apache RocketMQ架构中,消费分组属于状态管理的逻辑资源,每个消费分组都会涉及关联的消费状态、堆积信息、可观测指标和监控采集数据。因此,生产环境需要严格管理消费者分组资源,请勿随意进行增删改查操作。

        Apache RocketMQ 虽然提供了自动创建消费者分组的功能,但是建议仅在测试环境使用,生出环境请勿打开,避免产生大量消费者分组,无法管理和回收,且浪费系统资源。

3 消费者(Consumer)

        本节介绍Apache RocketMQ中消费者的定义、模型关系、内部属性、行为约束和使用建议。

3.1 定义

        消费者是Apache RocketMQ中用来接收并处理消息的运行实体。消费者通常被定义在业务系统中,从Apache RocketMQ服务端获取消息,并将消息转化成业务可理解的信息,供业务逻辑处理。在消息服务端,可以定义如下传输行为:

        1、消费者身份:消费者必须关联一个指定的消费者分组,以获取分组内统一定义的行为配置和消费状态。

        2、消费者类型:Apache RocketMQ 面向不同的并发场景提供了多样的消费者类型,包括PushConsumer类型、SimpleConsumer类型、PullConsumer类型(仅推荐流处理场景使用)等。

        3、消费者本地运行配置:消费者感根据不同的消费者类型,控制消费者客户端本地的运行配置。例如消费者客户端的线程数、消费并发度等,实现不同的传输效果。

3.2 模型关系

        在Apache RocketMQ的领域模型中,消费者的位置和流程如下:

        1、消息由生产者初始化并发送到Apache RocketMQ服务端。

        2、消息按照到达Apache RocketMQ服务端的顺序存储到主题的指定队列中。

        3、消费者按照指定的订阅关系从Apache RocketMQ服务端中获取消息并消费。

3.3 内部属性

        消费者分组名称

        · 定义:当前消费者关联的消费者分组名称,消费者必须关联到指定的消费者分组,通过消费者分组获取消费行为。

        · 取值:消费者分组为Apache RocketMQ的逻辑资源,需要提前通过控制台或API创建。

        客户端ID

        · 定义:消费者客户端的标识,用于区分不同的消费者。集群内全局唯一。

        · 取值:客户端ID由Apache RocketMQ 的SDK自动生成,主要用于日志查看、问题定位等运维场景,不支持修改。

        通信参数

        · 接入点信息(必选):连接服务端的接入地址,用于识别服务端集群。接入点必须按格式配置,建议使用域名,避免使用IP地址,防止节点变更无法进行热点迁移。

        · 身份认证信息(可选):客户端用于身份验证的凭证信息。仅在服务端开启身份识别和认证时需要传输。

        · 请求超时时间(可选):客户端网络请求调用的超时时间。

        预绑定订阅关系列表

        · 定义:指定消费者的订阅关系列表。Apache RocketMQ 服务端可在消费者初始化阶段,根据预绑定的订阅关系列表对目标主题进行权限以及合法性校验,无需等到应用启动后才能校验。

        · 取值:建议在消费者初始化阶段明确订阅关系即要订阅的主题列表,若未设置,或订阅的主题动态变更,Apache RocketMQ 会对目标主题进行动态补充校验。

        消费者监听器

        · 定义:Apache RocketMQ服务端将消费推送给消费者后,消费者调用消息消费逻辑的监听器。

        · 取值:由消费者客户端本地配置。

3.4 行为约束

        在Apache RocketMQ领域模型中,消费者的管理通过消费者分组实现,同一分组内的消费者共同分摊消息进行消费。因此,为了保证分组内消息的正常负载和消费。

        Apache RocketMQ要求同一分组内的消费者以下消费行为保持一致:

        投递顺序和消费者重试策略。

3.5 使用建议

        不建议在单一进程内创建大量的消费者

        Apache RocketMQ的消费者在通信协议层面支持非阻塞传输模式,网络通信效率较高,并且支持多线程并发访问。因此,大部分场景下,单一进程内同一个消费分组只需要初始化唯一的一个消费者即可,开发过程中应避免以相同的配置初始化多个消费者。

        不建议频繁创建和销毁消费者

        Apache RocketMQ的消费者是可以重复利用的底层资源,类似数据库的连接池。因此不需要在每次接收消息时动态创建消费者,且在消费者完成后销毁消费者。这样频繁地创建销毁会在服务端产生大量短连接请求,严重影响系统性能。

4 订阅关系(Subscription)

        本节介绍Apache RocketMQ中订阅关系的定义、模型关系、内部属性和使用建议。

4.1 定义

        订阅关系是Apache RocketMQ系统中消费者获取消息、处理消息的规则和状态配置。

        订阅关系由消费者分组动态注册到服务端系统,并在后续的消息传输中按照订阅关系定义的过滤规则进行消息匹配和消费进度维护。

        通过配置订阅关系,可控制如下传输行为:

        · 消息过滤规则:用于控制消费者在消费消息时,选择主题内的哪些消息进行消费,设置消费过滤规则可以高效地过滤消费者需要的消息集合,灵活根据不同的业务场景设置不同的消息接收范围。

        · 消费状态:Apache RocketMQ服务端默认提供订阅关系持久化的能力,即消费者分组在服务端注册订阅关系后,当消费者离线并再次上线后,可以获取离线前的消费进度并继续消费。

4.2 订阅关系判断原则

        Apache RocketMQ 的订阅关系按照消费者分组和主题粒度设计,因此,一个订阅关系指的是指定某个消费者分组对于某个主题的订阅,判断原则如下:

        · 不同消费者分组对于同一个主题的订阅互相独立如下图所示,消费者分组Group A和消费者分组Group B分别以不同的订阅关系订阅了同一个主题Topic A,这两个订阅关系互相独立,可以各自定义,不受影响。

        · 同一个消费者分组对于不同主题的订阅也相互独立如下图所示,消费者分组Group A订阅了两个主题Topic A和Topic B,对于Group A中的消费者来说,订阅的Topic A为一个订阅关系,订阅的Topic B为另一个订阅关系,且这两个订阅关系相互独立,可以各自定义,不受影响。

4.3 模型关系

        在Apache RocketMQ的领域模型中,订阅关系的位置和流程如下;

        1、消息由生产者初始化并发动到Apache RocketMQ服务端。

        2、消息按照到达Apache RocketMQ服务端的顺序存储到主题的指定队列中。

        3、消费者按照指定的订阅关系从Apache RocketMQ服务端获取消息并消费。

4.4 内部属性

        过滤类型

        · 定义:消息过滤规则的类型。订阅关系中设置消息过滤规则后,系统按照过滤规则匹配主题中的消息,只将符合条件的消息投递给消费者消费,实现消息的再次分类。

        · 取值:

        TAG过滤:按照Tag字符串进行全文过滤匹配。

        SQL92过滤:按照SQL语法对消息属性进行过滤匹配。

        过滤表达式

        · 定义:自定义的过滤规则表达式。

4.5 行为约束

        订阅关系一致

        Apache RocketMQ 是按照消费者分组粒度管理订阅关系,因此,同一消费者分组内的消费者在消费逻辑上必须保持一致,否则会出现消费冲突,导致部分消息消费异常。

4.6 使用建议

        建议不要频繁修改订阅关系

        在Apache RocketMQ领域模型中,订阅关系关联了过滤规则、消费进度等元数据和相关配置,同时系统需要保证消费者分组下的所有消费者的消费行为、消费逻辑、负责策略等一致,整体运算逻辑比较复杂。因此,不建议在生成环境中通过频繁修改订阅关系来实现业务逻辑的变更,这样可能会导致客户端一直处于负载均衡调整和变更的过程,从而影响消息接收。

                

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/380024.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

513. 找树左下角的值 - 力扣(LeetCode)

题目描述 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 题目示例 输入: root [2,1,3] 输出: 1 解题思路 深度优先搜索 使用 depth 记录遍历到的节点的深度,result 记录深度在 depth 的最…

C++ 动态规划 记忆化搜索 滑雪

给定一个 R 行 C 列的矩阵,表示一个矩形网格滑雪场。 矩阵中第 i 行第 j 列的点表示滑雪场的第 i 行第 j 列区域的高度。 一个人从滑雪场中的某个区域内出发,每次可以向上下左右任意一个方向滑动一个单位距离。 当然,一个人能够滑动到某相…

C++:二叉搜索树模拟实现(KV模型)

C:二叉搜索树模拟实现(KV模型) 前言模拟实现KV模型1. 节点封装2、前置工作(默认构造、拷贝构造、赋值重载、析构函数等)2. 数据插入(递归和非递归版本)3、数据删除(递归和非递归版本…

【芯片设计- RTL 数字逻辑设计入门 15 -- 函数实现数据大小端转换】

文章目录 函数实现数据大小端转换函数语法函数使用的规则Verilog and Testbench综合图VCS 仿真波形 函数实现数据大小端转换 在数字芯片设计中,经常把实现特定功能的模块编写成函数,在需要的时候再在主模块中调用,以提高代码的复用性和提高设…

《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)

文章目录 6.1 设置和管理复制6.1.1 基础知识6.1.2 重点案例:使用 Python 设置 MySQL 主从复制6.1.3 拓展案例 1:自动故障转移6.1.4 拓展案例 2:设置双主复制 6.2 复制的类型和策略6.2.1 基础知识6.2.2 重点案例:使用 Python 设置半…

目标检测 | 卷积神经网络(CNN)详细介绍及其原理详解

前言:Hello大家好,我是小哥谈。卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习模型,主要用于图像识别和计算机视觉任务。它的设计灵感来自于生物学中视觉皮层的工作原理。CNN的核心思想是通…

极智一周 | 国产CPU系列汇总、鲲鹏、飞腾、平头哥 And so on

欢迎关注我的公众号 [极智视界],获取我的更多技术分享 大家好,我是极智视界,带来本周的 [极智一周],关键词:国产CPU系列汇总、鲲鹏、飞腾、平头哥 And so on。 邀您加入我的知识星球「极智视界」,星球目前…

一分钟了解电脑关机快捷键是什么!

在日常使用电脑的过程中,了解一些基本的快捷键是提高效率的关键之一。其中,电脑关机快捷键是一个方便且迅速的操作,使您可以在不用通过烦琐的菜单操作的情况下,快速关机电脑。在本文中,我们将探讨电脑关机快捷键是什么…

Linux——进程池(管道)

经过了管道的介绍之后,我们可以实现了进程间通信,现在我就来简单介 绍一下管道的应用场景——进程池。1. 引入 在我们的编码过程中,不乏会听到,内存池,进程池,空间配置器等等名词,这些是用来干…

NLP_神经概率语言模型(NPLM)

文章目录 NPLM的起源NPLM的实现1.构建实验语料库2.生成NPLM训练数据3.定义NPLM4.实例化NPLM5.训练NPLM6.用NPLM预测新词 NPLM小结 NPLM的起源 在NPLM之前,传统的语言模型主要依赖于最基本的N-Gram技术,通过统计词汇的共现频率来计算词汇组合的概率。然而…

【Linux】SystemV IPC

进程间通信 一、SystemV 共享内存1. 共享内存原理2. 系统调用接口(1)创建共享内存(2)形成 key(3)测试接口(4)关联进程(5)取消关联(6)释…

5周年狂欢,WeTrade众汇积分商城又送车啦!

各位投资者:新年好啊! WeTrade众汇承诺积分商城所有礼品,不论价值大小,送出均为真实有效,不做虚假宣传。 WeTrade众汇继2018年9月28日送出特斯拉Model X后,又一次迎来了第二位在积分商城兑换豪车的客户! …

(全网最全)微型计算机原理与接口技术第六版课后习题答案-周荷琴,冯焕清-第8章中断和可编程中断控制器8259A-中国科学技术大学出版社

含有“AI:”开头的题目的答案是问chat的,看个乐就行,不一定正确 1。 什么叫中断?中断的主要功能是什么? 答:当CPU正在处某件事情的时候,外部发生的某一事件请求CPU迅速去处理,于是,CPU暂时中止当前工作,转去处理所发生的事件,中…

《MySQL 简易速速上手小册》第4章:数据安全性管理(2024 最新版)

文章目录 4.1 用户认证和权限控制4.1.1 基础知识4.1.2 重点案例:使用 Python 管理 MySQL 用户权限4.1.3 拓展案例 4.2 防止 SQL 注入和其他安全威胁4.2.1 基础知识4.2.2 重点案例:使用 Python 和 MySQL 进行安全的数据查询4.2.3 拓展案例 4.3 数据加密和…

算法练习-二叉搜索树中的搜索(思路+流程图+代码)

难度参考 难度:中等 分类:二叉树 难度与分类由我所参与的培训课程提供,但需要注意的是,难度与分类仅供参考。且所在课程未提供测试平台,故实现代码主要为自行测试的那种,以下内容均为个人笔记,旨…

CUDA简介

CPUGPU异构计算 GPU计算并不是指单独的GPU计算,而是指CPUGPU的异构计算。一块单独的GPU是无法独立的完成所有计算任务的,它必须在CPU的调度下才能完成特定的任务。CPU更适合进行逻辑复杂低并行的程序,GPU更适合逻辑简单高并行的任务。这主要…

问题:必须坚持以中国式现代化推进中华民族伟大复兴,既不走封闭僵化的老路,也不走 #媒体#知识分享

问题:必须坚持以中国式现代化推进中华民族伟大复兴,既不走封闭僵化的老路,也不走 A、中国特色社会主义道路 B、改革开放之路 C、改旗易帜的邪路 D、中国式现代化之路 参考答案如图所示

HarmonyOS 鸿蒙 ArkTS 双色旋转动画效果

下载地址: https://download.csdn.net/download/weixin_54226053/88818859 也可以点击顶部的资源下载

【Git】Windows下通过Docker安装GitLab

私有仓库 前言基本思路拉取镜像创建挂载目录创建容器容器启动成功登录仓库设置中文更改密码人员审核配置邮箱 前言 由于某云存在人数限制,这个其实很好理解,毕竟使用的是云服务器,人家也是要交钱的。把代码完全放在别人的服务器上面&#xf…

Qt网络编程-ZMQ的使用

不同主机或者相同主机中不同进程之间可以借助网络通信相互进行数据交互,网络通信实现了进程之间的通信。比如两个进程之间需要借助UDP进行单播通信,则双方需要知道对方的IP和端口,假设两者不在同一主机中,如下示意图: …