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

                

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

C++基础入门之引用

目录 一.引用 1.1引用和取地址 1.2 别名和原名的区别 1.3 引用的用法 1.31 做参数 1.311 输出型参数:形参改变实参 1.312 可以减少拷贝,增加效率 1.32 引用的约定 1. 引用必须初始化 2. 引用定义后,不能改变指向 4. 给指针取别名 1.33…

【Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)】

Linux环境基础开发工具的使用yum、vim、gcc、g、gdb、make/Makefile Linux软件包管理器- yumLinux下安装软件的方式认识yum查找软件包安装软件如何实现本地机器和云服务器之间的文件互传卸载软件 Linux编辑器 - vimvim的基本概念vim下各模式的切换vim命令模式各命令汇总vim底行…

聊聊JIT优化技术

🎬作者简介:大家好,我是小徐🥇☁️博客首页:CSDN主页小徐的博客🌄每日一句:好学而不勤非真好学者 📜 欢迎大家关注! ❤️ 我们知道,想要把高级语言转变成计算…

《动手学深度学习(PyTorch版)》笔记7.7

注:书中对代码的讲解并不详细,本文对很多细节做了详细注释。另外,书上的源代码是在Jupyter Notebook上运行的,较为分散,本文将代码集中起来,并加以完善,全部用vscode在python 3.9.18下测试通过&…

Python中的嵌套字典访问与操作详解

前言 在Python编程中,嵌套字典是一种常见的数据结构,它可以以层次结构的方式组织和存储数据。嵌套字典通常包含字典内嵌套在其他字典中,创建了一种多层级的数据结构。本文将详细介绍如何在Python中访问和操作嵌套字典,包括访问、…

卷积层Conv1d包含的元素分别是什么,经过卷积层,数据的形状发生变化吗?

nn.Conv1d 是一个一维卷积层,它通常用于处理序列数据,如时间序列或文本数据。这个层包含以下主要元素: 输入通道数(In_channels):这是输入数据的通道数。对于单通道数据(如灰度图像或单变量时间…

Leetcode3021. Alice 和 Bob 玩鲜花游戏

Every day a Leetcode 题目来源:3021. Alice 和 Bob 玩鲜花游戏 解法1:数学 Alice 和 Bob 在一个长满鲜花的环形草地玩一个回合制游戏。环形的草地上有一些鲜花,Alice 到 Bob 之间顺时针有 x 朵鲜花,逆时针有 y 朵鲜花。 游戏…

Ubuntu环境下安装部署Nginx(有网)

本文档适用于在Ubuntu20.04系统下部署nginx 一、使用apt-get命令安装nginx 注:以下命令都是在root用户下使用 1. 检查是否存在apt命令 apt –version 说明:出现版本号就说明当前环境存在apt 2. 更新apt命令 apt update 3. 安装nginx apt-get in…

containerd中文翻译系列(十八)containerd支持NRI

节点资源接口 NRI 是节点资源接口(Node Resource Interface),它是一个通用框架,用于将扩展功能插入兼容 OCI 的容器运行时。它提供了插件跟踪容器状态并对其配置进行有限的更改改的基本机制。 NRI 本身与任何容器运行时的内部实…

猫头虎分享已解决Bug || AJAX请求错误(AJAX Request Error):AJAX Error: 404 Not Found

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

SpringIOC之support模块ReloadableResourceBundleMessageSource

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

分布式系统架构介绍

1、为什么需要分布式架构? 增大系统容量:单台系统的性能瓶颈,多台机器才能应对大规模的应用场景,所以就需要我们的应用支撑平台具备分布式架构。 加强系统的可用:为了满足业务的SLA要求,需要通过分布式架构…

uniapp的配置和使用

①安装环境和编辑器 注册小程序账号 微信开发者工具下载 uniapp 官网 HbuilderX 下载 首先先下载Hbuilder和微信开发者工具 (都是傻瓜式安装),然后注册小程序账号: 拿到appid: ②简单通过demo使用微信开发者工具和…

Linux开发工具的使用 (gcc/g++ | gdb)

目录 一、gcc/g 1.关于gcc/g 2.gcc如何使用 gcc选项: 预处理: 编译: 汇编: 连接: 函数库是什么: 函数库分为动态库和静态库两种 二、调试器gdb 1.关于gdb 2. gdb的使用 gdb选项: Linux是一个广泛用于开发的操作系统&…

关于数字图像处理考试

我们学校这门科目是半学期就完结哦,同学们学习的时候要注意时间哦。 选择题不用管,到时候会有各种版本的复习资料的。 以下这些东西可能会是大题的重点: 我根据平时代码总结的,供参考 基本操作: 1.读图:…

新书速览|PyTorch 2.0深度学习从零开始学

实战中文情感分类、拼音汉字转化、中文文本分类、拼音汉字翻译、强化学习、语音唤醒、人脸识别 01 本书简介 本书以通俗易懂的方式介绍PyTorch深度学习基础理论,并以项目实战的形式详细介绍PyTorch框架的使用。为读者揭示PyTorch 2.0进行深度学习项目实战的核心技…

Springboot+vue的社区智慧养老监护管理平台设计与实现(有报告),Javaee项目,springboot vue前后端分离项目

演示视频: Springbootvue的社区智慧养老监护管理平台设计与实现(有报告),Javaee项目,springboot vue前后端分离项目 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的社区智慧养老监护管理平台设…

GPIO输入

GPIO输入 实现的功能:按键控制LED、光敏传感器控制蜂鸣器 按键:常见的输入设备,按下导通,松开断开 按键抖动:由于按键内部使用的是机械弹簧片来进行通断的,所以在按下和松手的瞬间会伴随有一连串的抖动。 …

Linux匿名管道

目录 1.原理 1.直接原理 2.本质原理 2.管道接口 3.管道中的四种情况 1.读写端正常,管道如果为空,读端就要堵塞 2.读写端正常,管道如果被写满,写端就要堵塞 3.读端正常,写端关闭,读端就会读到0&#…

图书系统的Web实现(含源码)

源码地址https://gitee.com/an-indestructible-blade/project 注意事项: BorrowBooksWeb\src\main\resources路径下的application.yml文件里面的url,username,password这三个属性和自己的数据库保持一致。 浏览器访问url:http://127.0.0.1:…