【RocketMQ】一、基本概念

news2024/9/22 17:24:52

文章目录

  • 1、举例
  • 2、MQ异步通信
  • 3、背景
  • 4、Rocket MQ 角色概述
    • 4.1 主题
    • 4.2 队列
    • 4.3 消息
    • 4.4 生产者
    • 4.5 消费者分组
    • 4.6 消费者
    • 4.7 订阅关系
  • 5、消息传输模型
    • 5.1 点对点模型
    • 5.2 发布订阅模型

1、举例

以坐火车类比MQ:
在这里插入图片描述
安检大厅就像是一个系统的门面,接受来自四面八方且目的地不同的人流,并完成基础的安全校验。人来了,不是直接涌上火车,而是根据所乘坐的车次,到不同的候车厅等着,火车则是消费这些人,现实中是把他们拉到对应的地方,这个候车厅,就像MQ,而不同的车次走向不同的候车厅,则是“主题”这个概念的味道。

2、MQ异步通信

同步通信下,每个请求直接从调用方发送到被调用方,且要求被调用方立即返回响应结果给调用方,以便确定本次调用是否成功。

在这里插入图片描述

异步通信下,调用方只需将请求转换成异步时间(消息)发送给中间代理,发送成功,即可为该异步链路调用完成。剩下的工作会有中间代理可靠地通知到下游的被调用系统,以确保任务执行完成。这个中间代理,一般就是消息中间件。

在这里插入图片描述

3、背景

Rocket MQ是阿里专为万亿级超大规模的消息处理而设计,具有高吞吐、低延迟、海量堆积、顺序收发等特点,项目发展:

  • 2012年阿里开发Rocket MQ
  • 2015年重大特性发布:事务消息、SQL过滤、轨迹追踪、定时消息
  • 2016年在阿里云托管,并捐赠给Apache
  • 2017年成为Apache的顶级项目
// apache的官网apache.org前,加上技术,如rocketmq
https://rocketmq.apache.org

4、Rocket MQ 角色概述

消息生产者生产出消息,投递到对应的topic主题下的队列里面(一个topic下,有多个Message Queue),消费者组通过订阅主题,从RocketMQ 服务端中获取消息并消费。

在这里插入图片描述

4.1 主题

  • 一个主题下有多个队列
  • 消息类型必须一致:创建主题时,消息类型为顺序消息,却又发送事务消息到该主题,就会返回类型不匹配的异常
  • 每种主题只支持一种消息类型
  • 主题的拆分,可以根据业务和消息类型这两方面来考虑

4.2 队列

  • 主题是一个逻辑概念,队列才是真正存储消息的
  • 所有成功发送到队列的消息,默认做持久化
  • 生产者指定某个主题,向主题内发送消息,但实际消息发送到该主题下的某个队列中
  • 同一队列间的消息天然存在顺序关系,头部最早,尾部最新
  • 消息在队列中的位置和消息之间的顺序通过位点(Offset) 进行标记管理
  • 可以从任意位点读取任意数量的消息,以此实现类似聚合读取、回溯读取

4.3 消息

  • 默认对消息做持久化
  • 消息对象的属性有两类,生产者自己定义的 + Rocket MQ服务端自己生成并填充的
  • 生产者自己定义的属性有:所要投递到的主题名称、消息类型、消息负载body、索引Key列表、过滤标签tag、定时时间等
  • Rocket MQ服务端自己生成并填充的属性有:实际存储当前消息的队列、消息位点offset、消息ID、消息重试次数

在这里插入图片描述

4.4 生产者

在这里插入图片描述

  • 同一个生产者可以向多个主题发送消息,并不需要创建多个生产者,同一个主题也可以接收多个生产者的消息
  • 生产者发送消息可以选择同步或者异步
  • 生产者可以选择批量发送消息
  • 不要频繁创建和销毁生产者(RocketMQ 的生产者是可以重复利用的底层资源,类似数据库的连接池)
  • 失败重试和事务控制见后续
// 正确
Producer p = ProducerBuilder.build();
for (int i =0;i<n;i++){
    Message m= MessageBuilder.build();
    p.send(m);
 }
p.shutdown();

// 错误
for (int i =0;i<n;i++){
    Producer p = ProducerBuilder.build();
    Message m= MessageBuilder.build();
    p.send(m);
    p.shutdown();
}

4.5 消费者分组

  • 一组消费逻辑一致的消费者
  • 通过消费者分组内初始化多个消费者实现消费性能的水平扩展
  • Apache RocketMQ 以消费者分组的粒度来管理订阅关系
  • Apache RocketMQ 的服务端将消息投递给消费者消费时,支持顺序投递和并发投递,也是在消费者组中定义
  • 消费者消费消息失败时的重试策略,包括重试次数、死信队列设置等,也是在消费者分组中定义

4.6 消费者

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

  • 消费者类型有:PushConsumer类型、SimpleConsumer类型、PullConsumer类型(仅推荐流处理场景使用)

  • RocketMQ 的消费者是可以重复利用的底层资源,类似数据库的连接池,所以不要频繁创建和销毁消费者

// 正确
Consumer c = ConsumerBuilder.build();
for (int i =0;i<n;i++){
      Message m= c.receive();
      //process message
    }
c.shutdown();

// 错误
for (int i =0;i<n;i++){
    Consumer c = ConsumerBuilder.build();
    Message m= c.receive();
    //process message
    c.shutdown();
}

4.7 订阅关系

  • 订阅关系是针对消费者分组和主题来说的,不是单独的一个消费者
  • 如下,两个消费者分组都订阅了主题A,且两个分组要求的数据不同,一个要带Tag a,一个要带Tag b

在这里插入图片描述

  • 如下,同一个消费者组,也可以订阅两个不同的主题

在这里插入图片描述

5、消息传输模型

5.1 点对点模型

  • 消费者和生产者之间,只认同一个队列
  • 即使消费者有多个,一条消息也只能被唯一一个消费者实例处理
    在这里插入图片描述

5.2 发布订阅模型

  • 同一个主题内的消息,可以被多个订阅组消费
  • 每个订阅组都可以拿到全量消息
    在这里插入图片描述

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

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

相关文章

springboot地方特色美食分享系统-计算机毕业设计源码02383

摘要 本论文主要论述了如何使用SpringBoot技术开发一个地方特色美食分享系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述地方特色美食分享系统的当前背景以…

数据结构与算法——Java实现 8.习题——移除链表元素(值)

祝福你有前路坦途的好运&#xff0c;更祝愿你能保持内心光亮 纵有风雨&#xff0c;依然选择勇敢前行 —— 24.9.22 203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示…

uniapp 微信小程序 订阅消息功能实现

该网址 https://api.weixin.qq.com 上线后不可访问&#xff0c;调用该网址操作需在后端&#xff08; 重要&#xff01; 重要&#xff01; 重要&#xff01;&#xff09; 1.首先拿到的三个码 //微信公众平台 //https://mp.weixin.qq.com const wxappid "管理-开发管理-A…

手机号归属地查询-运营商归属地查询-手机号归属地信息-运营商手机号归属地查询接口-手机号归属地

手机号归属地查询接口是一种网络服务接口&#xff0c;它允许开发者通过编程方式查询手机号码的注册地信息。这种接口通常由第三方服务提供商提供&#xff0c;并可通过HTTP请求进行调用。以下是一些关于手机号归属地查询接口的相关信息&#xff1a; 1. 接口功能 归属地查询&am…

51单片机——矩阵键盘

一、矩阵键盘原理图 我们发现: P17,P16,P15,P14控制行&#xff0c; P13,P12,P11,P10控制列。 所以我们如果要选择第四列&#xff0c;只需要把整个P1先给高电位1&#xff0c;再把P10给低电位0。 二、代码 P10xFF; P100; if(P170){Delay(20);while(P170);Delay(20);KeyNum…

EasyExcel根据模板生成excel文件【xls、xlsx】

1、简介 如下图所示&#xff0c;template目录下是准备好的模板&#xff0c;export目录下是生成数据文件。我们这里以第一个模板《theUser蒸汽历史数据.xls》为例进行测试&#xff0c;theUser为占位符&#xff0c;生成的文件中会被替换成对应的用户名。 我这里的代码逻辑是根据…

[Linux]:信号(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 1. 信号的阻塞 1.1 基本概念 信号被操作系统发送给进程之后&#xff0c;进程…

语言模型的在线策略提炼:从自我错误中学习

原论文&#xff1a;On-Policy Distillation of Language Models: Learning from Self-Generated Mistakes 摘要 知识蒸馏&#xff08;KD&#xff09;被广泛用于通过训练较小的学生模型来压缩教师模型&#xff0c;以降低推理成本和内存占用。然而&#xff0c;当前用于自回归序…

【笔记】材料分析测试:晶体学

晶体与晶体结构Crystal and Crystal Structure 1.晶体主要特征 固态物质可以分为晶态和非晶态两大类&#xff0c;分别称为晶体和非晶体。 晶体和非晶体在微观结构上的区别在于是否具有长程有序。 晶体&#xff08;长程有序&#xff09;非晶&#xff08;短程有序&#xff09…

Selenium4.0实现自动搜索功能

01.Selenium4.0实现搜索功能 1.安装Selenium及查看Selenium版本 pip install selenium pip show seleniumfrom selenium import webdriver from chromedriver_py import binary_path import time from selenium.webdriver.common.by import By from selenium.webdriver.commo…

postman控制变量和常用方法

1、添加环境&#xff1a; 2、环境添加变量&#xff1a; 3、配置不同的环境&#xff1a;local、dev、sit、uat、pro 4、 接口调用 5、清除cookie方法&#xff1a; 6、下载文件方法&#xff1a;

SSM+vue音乐播放器管理系统

音乐播放器管理系统 随着社会的发展&#xff0c;计算机的优势和普及使得音乐播放器管理系统的开发成为必需。音乐播放器管理系统主要是借助计算机&#xff0c;通过对首页、音乐推荐、付费音乐、论坛信息、个人中心、后台管理等信息进行管理。减少管理员的工作&#xff0c;同时…

c# 线程等待变量的值符合条件

在C#中&#xff0c;如果你想让一个线程等待直到某个变量的值满足特定条件&#xff0c;你可以使用ManualResetEvent或者AutoResetEvent来实现线程间的同步。以下是使用AutoResetEvent实现的一个简单例子&#xff1a; 在这个例子中&#xff0c;同时实现了如何让static函数访问非…

高等数学 3.6 函数图像的描绘

利用导数描绘函数图形的一般步骤如下&#xff1a; &#xff08;1&#xff09;确定函数 y f ( x ) y f(x) yf(x) 的定义域及函数所具有的某些特性&#xff08;如奇偶性、周期性等&#xff09;&#xff0c;并求出函数的一阶导数 f ′ ( x ) f^{}(x) f′(x) 和二阶导数 f ′ …

【YOLO目标检测手势识别数据集】共55952张、已标注txt格式、有训练好的yolov5的模型

目录 说明图片示例 说明 数据集格式&#xff1a;YOLO格式 图片数量&#xff1a;55952 标注数量(txt文件个数)&#xff1a;55952 标注类别数&#xff1a;7 标注类别名称&#xff1a; one two three four five good ok 数据集下载&#xff1a;手势识别数据集 图片示例 数…

【CSS】伪类选择器 :root 声明全局CSS变量

语法 <style>:root {/* ... */} </style>这个 CSS 伪类 :root 匹配文档树的根元素&#xff0c;表示选中 <html> 元素&#xff0c;除了优先级更高之外&#xff0c;与 html 选择器相同 <style>/* 选中文档的根元素&#xff08;HTML 中的 <html>&a…

制造业的智能化革命:工业物联网(IIoT)的优势、层级应用及挑战解析

在全球制造业的蓬勃发展中&#xff0c;工业物联网&#xff08;IIoT&#xff09;作为一股颠覆性力量&#xff0c;正逐步重塑传统制造业的面貌。IIoT技术通过无缝连接设备、系统与人员&#xff0c;促进了数据的即时流通与处理&#xff0c;不仅极大地提升了制造效率&#xff0c;还…

pikachu XXE(XML外部实体注入)通关

靶场&#xff1a;pikachu 环境: 系统&#xff1a;Windows10 服务器&#xff1a;PHPstudy2018 靶场&#xff1a;pikachu 关卡提示说&#xff1a;这是一个接收xml数据的api 常用的Payload 回显 <?xml version"1.0"?> <!DOCTYPE foo [ <!ENTITY …

【Godot4.3】基于状态切换的游戏元素概论

提示 本文的设想性质比较大,只是探讨一种设计思路。完全理论阶段&#xff0c;不可行就当是闹了个笑话O(∩_∩)O哈哈~但很符合我瞎搞的气质。 概述 一些游戏元素&#xff0c;其实是拥有多个状态的。比如一个宝箱&#xff0c;有打开和关闭两个状态。那么只需要设定两个状态的图…