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://www.mzph.cn/news/677601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】字符串函数的学习

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-J7VN4RbrBi51ozap {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

kali最新最简单安装

之前都是用iso镜像文件的 今年好多东西都删库了,所有还是要主要资源的保存 去官网找下载 一般来说都是用虚拟机的 下载完会是一个压缩文件, 解压,然后操作之前需要先下载虚拟机 打开方式用虚拟机打开 kali就按装好了

Spring Boot3统一结果封装

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途。 目录 前置条件 封装目的 常用格式 定义返回结果枚举类 定义返回结果封装类 对返回结果封装 测试封装 前置条件 已…

「daily updating」k3s + openfaas serverless bench 踩坑指南持续更新中

OpenFaas从入门到实战 – 踩坑指南 | k3dOpenFaas | deploy your first python function https://blog.alexellis.io/first-faas-python-function/ https://docs.openfaas.com/deployment/kubernetes/ 搭建环境:第一种方法失败,第二种方法…

【SpringBootStarter】自定义全局加解密组件

【SpringBootStarter】 目的 了解SpringBoot Starter相关概念以及开发流程实现自定义SpringBoot Starter(全局加解密)了解测试流程优化 最终引用的效果&#xff1a; <dependency><groupId>com.xbhog</groupId><artifactId>globalValidation-spring…

[职场] 大厂群面的基本题型 #学习方法#其他

大厂群面的基本题型 大厂群面的基本题型 群面&#xff0c;又叫做“无领导小组面试”。历年来是企业校招时&#xff0c;进行大批量刷人的有效方法。流行于互联网、快消、银行、四大等多个行业。因为难度大、情况复杂、淘汰率高&#xff0c;又被称为“死亡面试”。 无领导小组…

CSP-202012-2-期末预测之最佳阈值

CSP-202012-2-期末预测之最佳阈值 【70分思路】 本题的难点还是时间复杂度&#xff0c;暴力枚举会导致时间超限。对于每一个可能的阈值theta&#xff0c;代码都重新计算了整个predict数组&#xff0c;统计预测正确的数目&#xff0c;因为有两个嵌套的循环&#xff0c;使得时间…

计算机网络之一

目录 1.因特网概述 1.1网络、互连网&#xff08;互联网&#xff09;和因特网 1.2.因特网发展的三个阶段 1.3基于ISP的三层架构的因特网 1.4.因特网的组成 2.三种交换方式 2.1电路交换 2.2分组交换 1.因特网概述 1.1网络、互连网&#xff08;互联网&#xff09;和因特网…

Git分支常用指令

目录 1 git branch 2 git branch xx 3 git checkout xx 4 git checkout -b xx 5 git branch -d xx 6 git branch -D xx 7 git merge xx(含快进模式和冲突解决的讲解) 注意git-log: 1 git branch 作用&#xff1a;查看分支 示例&#xff1a; 2 git branch xx 作用&a…

数据结构——5.5 树与二叉树的应用

5.5 树与二叉树的应用 概念 结点的权&#xff1a;大小可以表示结点的重要性 结点的带权路径长度&#xff1a;从树的根到该结&#xff0c;的路径长度&#xff08;经过的边数&#xff09;与该结点权的乘积 树的带权路径长度&#xff1a;树中所有叶结点的带权路径长度之和(WPL) …

蜂鸣器播放提示音音乐(天空之城)

目录 蜂鸣器播放提示音 蜂鸣器播放音乐&#xff08;天空之城&#xff09; 准备工作 主程序 中断函数 上一节讲了蜂鸣器驱动原理和乐理基础知识&#xff0c;这一节开始代码演示&#xff01; 蜂鸣器播放提示音 先创建工程&#xff1a;蜂鸣器播放提示音 把我们之前模块化的…

python 爬虫篇(3)---->Beautiful Soup 网页解析库的使用(包含实例代码)

Beautiful Soup 网页解析库的使用 文章目录 Beautiful Soup 网页解析库的使用前言一、安装Beautiful Soup 和 lxml二、Beautiful Soup基本使用方法标签选择器1 .string --获取文本内容2 .name --获取标签本身名称3 .attrs[] --通过属性拿属性的值标准选择器find_all( name , at…

Sentinel 源码分析

Sentinel源码分析 项目源码 1.Sentinel的基本概念 Sentinel实现限流、隔离、降级、熔断等功能&#xff0c;本质要做的就是两件事情&#xff1a; 统计数据&#xff1a;统计某个资源的访问数据&#xff08;QPS、RT等信息&#xff09;规则判断&#xff1a;判断限流规则、隔离规…

20240210使用剪映识别字幕的时候的GPU占比RX580-RTX4090

20240210使用剪映识别字幕的时候的GPU占比RX580-RTX4090 2024/2/10 17:54 【使用剪映识别不同的封装格式&#xff0c;不同的音视频编码&#xff0c;对GPU的占用率可能会有比较大的不同&#xff01;】 很容易发现在在WIN10下使用剪映的时候&#xff0c;X99RX550组合。 GPU部分&…

【Spring】Bean 的生命周期

一、Bean 的生命周期 Spring 其实就是一个管理 Bean 对象的工厂&#xff0c;它负责对象的创建&#xff0c;对象的销毁等 所谓的生命周期就是&#xff1a;对象从创建开始到最终销毁的整个过程 什么时候创建 Bean 对象&#xff1f;创建 Bean 对象的前后会调用什么方法&#xf…

【Go】三、Go并发编程

并发编程 我们主流的并发编程思路一般有&#xff1a;多进程、多线程 但这两种方式都需要操作系统介入&#xff0c;进入内核态&#xff0c;是十分大的时间开销 由此而来&#xff0c;一个解决该需求的技术出现了&#xff1a;用户级线程&#xff0c;也叫做 绿程、轻量级线程、协…

大厂的供应链域数据中台设计

关注我&#xff0c;紧跟本系列专栏文章&#xff0c;咱们下篇再续&#xff01; 作者简介&#xff1a;魔都技术专家兼架构&#xff0c;多家大厂后端一线研发经验&#xff0c;各大技术社区头部专家博主&#xff0c;编程严选网创始人。具有丰富的引领团队经验&#xff0c;深厚业务架…

庆除夕,比特币两日大涨10%

号外&#xff1a;教链内参2024年1月合订本 今日除夕。昨日今日两天&#xff0c;比特币从43k发力上攻&#xff0c;一度涨超10%至47.7k&#xff0c;以独特的方式给全世界的bitcoiners送去了新春的祝福。 一个新鲜的知识&#xff1a;2023年12月22日&#xff0c;第78届联合国大会协…

JVM 执行引擎

概念 执行class文件中的指令&#xff0c;由解释器编译器组成 补充——Java为什么是半编译半解释型语言 因为Java即有编译器也有解释器&#xff0c;可以用其中一种来运行。 程序执行步骤 解释器与编译器区别 编译器 概念 JIT&#xff08;Just In Time Compiler&#xff09;…

深入探索Java IO:从基础到高级操作全览

深入探索Java IO&#xff1a;从基础到高级操作全览 Java IO一、概览二、磁盘操作三、字节操作实现文件复制装饰者模式 四、字符操作编码与解码String 的编码方式Reader 与 Writer实现逐行输出文本文件的内容 五、对象操作序列化Serializabletransient 六、网络操作InetAddressU…