当前位置: 首页 > news >正文

【RocketMQ】一、基本概念

文章目录

  • 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 messagec.shutdown();
}

4.7 订阅关系

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

在这里插入图片描述

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

在这里插入图片描述

5、消息传输模型

5.1 点对点模型

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

5.2 发布订阅模型

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

相关文章:

【RocketMQ】一、基本概念

文章目录 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&#xff1a; 安检大厅就像是一个系统的门面&#xff0c;接受来…...

笔记9.18

线程之间的通信是指在多线程程序中&#xff0c;不同线程之间如何交换数据或协调工作。这种通信对于实现复杂的并发程序是至关重要的。以下是几种常见的线程间通信方式&#xff1a; 共享内存&#xff1a; 这是最直接的方式&#xff0c;多个线程通过读写同一块内存区域&#xff0…...

时间序列8个基准Baseline模型及其详细解读

我是从去年11月份开始&#xff0c;选定时间序列预测这个方向&#xff0c;准备在工作之余继续独立进行一些科学研究。选定这个方向是因为我对金融量化一直挺感兴趣&#xff0c;希望能把时间序列中的深度学习算法模型&#xff0c;用到金融数据。现在看来&#xff0c;我太过于理想…...

将相机深度图转接为点云的ROS2功能包

depth_image_proc 是一个 ROS&#xff08;Robot Operating System&#xff09;包&#xff0c;它包含了一系列节点&#xff0c;用于处理来自深度相机的图像数据&#xff0c;并将其转换为点云。以下是 depth_image_proc 包中各个节点的作用&#xff1a; convert_metric_node&…...

计算机毕业设计选题推荐-共享图书管理系统-小程序/App

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

架构师:在 Spring Cloud 中实现全局异常处理的技术指南

1、简述 在分布式系统中,微服务架构是最流行的设计模式之一。Spring Cloud 提供了各种工具和库来简化微服务的开发和管理。然而,随着服务的增多,处理每个服务中的异常变得尤为复杂。因此,实现统一的全局异常处理成为了关键。本篇博客将介绍如何在 Spring Cloud 微服务架构…...

es由一个集群迁移到另外一个集群es的数据迁移

迁移es的数据 改下index的索引 就可以了。 查询 用curl -u就可以查询了...

java项目之常规应急物资管理系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的常规应急物资管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息。 项目简介&#xff1a; 基于SpringBootVue的…...

text2sql方法:RESDSQL和DAIL-SQL

之前介绍了text2sql的综述&#xff0c;但是对一些方法的描述不够详细&#xff0c;所以将一些感兴趣的方法思路也整理一下。 RESDSQL RESDSQL出自2023年2月的论文《RESDSQL: Decoupling Schema Linking and Skeleton Parsing for Text-to-SQL》(github)。它使用seq2seq PLM(pr…...

Stable Diffusion 优秀博客转载

初版论文地址&#xff1a;https://arxiv.org/pdf/2112.10752 主要流程图&#xff1a; Latent Diffusion Models&#xff08;LDMs&#xff09; DDPM是"Denoising Diffusion Probabilistic Models"的缩写&#xff0c; 去噪扩散概率模型 博客&#xff1a; 【论文阅读…...

探索IT行业的无限潜力:技术、发展与职业前景

探索IT行业的无限潜力&#xff1a;技术、发展与职业前景 1. 引言 信息技术&#xff08;IT&#xff09;已经彻底改变了我们的生活方式&#xff0c;从智能手机到云计算&#xff0c;IT无处不在。无论是公司管理系统、社交媒体&#xff0c;还是大数据分析平台&#xff0c;IT推动了…...

ESP32配网接入Wifi

1 ESP32的两种模式 AP模式:ESP32可以作为热点,手机和电脑等设备接入使用。 STA模式:ESP32可以作为作为客户端接入其他网络中。 2 流程 step1: ESP32上电后进入STA模式,尝试看能够接入网络 step2: 如何连接成功,则正常运行。如何连接超时,则自动进入AP模式,设置AP热点…...

前端-js例子:收钱转账

支付宝转账 在这里用到周期定时器setInterval(function,time)&#xff0c;设置达到目标钱数时停止定时器。 点击转账按钮时&#xff0c;开始函数显示。 同时要确定输入框里输入的是数字。&#xff08;有一定容错&#xff09; window.onloadfunction(){var btn document.que…...

2024 BaseCTF repwn 部分wp

You are good at IDA 附件拖入ida。比较简单 UPX mini upx壳&#xff0c;无魔改&#xff0c;直接脱。脱完拖入ida。比较简单 Ez Xor 附件拖入ida 比较简单。脚本 ez_maze 附件拖入ida 一个宽为15的迷宫 BasePlus 附件拖入ida。变表base64再异或0xE 签个到吧 nc连上即得 echo nc…...

每日学习一个数据结构-倒排表

文章目录 示意图倒排表的基本概念倒排表的数据结构示例 倒排表的优点应用场景 倒排表&#xff08;Inverted Index&#xff09;&#xff0c;也称为反向索引或倒排文件&#xff0c;在信息检索系统中是一种重要的数据结构。它主要用于快速搜索文档中的关键词&#xff0c;并找到包含…...

828华为云征文|部署在线文件管理器 Spacedrive

828华为云征文&#xff5c;部署在线文件管理器 Spacedrive 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 产品优势1.3 计费模式 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Spacedrive3.1 Spacedrive 介绍3.2 Docker 环境搭建3.3 Spac…...

Alluxio EnterpriseAI on K8s 部署教程

Alluxio Enterprise AI on K8s 部署视频教程 视频为Alluxio Enterprise AI on K8s 部署视频教程。下面内容将主要介绍如何通过 Operator&#xff08;Kubernetes 管理应用程序的扩展&#xff09;在 Kubernetes 上安装 Alluxio。 1. 系统要求 Kubernetes 至少1.19版本的 Kubern…...

鸿蒙OpenHarmony【轻量系统内核扩展组件(动态加载)】子系统开发

基本概念 在硬件资源有限的小设备中&#xff0c;需要通过算法的动态部署能力来解决无法同时部署多种算法的问题。以开发者易用为主要考虑因素&#xff0c;同时考虑到多平台的通用性&#xff0c;LiteOS-M选择业界标准的ELF加载方案&#xff0c;方便拓展算法生态。LiteOS-M提供类…...

Leetcode42. 接雨水

讲的好的视频讲解 【很难想象这up刷题的精神状态 Leetcode42. 接雨水】 https://www.bilibili.com/video/BV1MC411n7Af/?share_sourcecopy_web&vd_sourceafbacdc02063c57e7a2ef256a4db9d2a rm是right max的意思&#xff0c;lm是left max的意思 时间复杂度&#xff1a; O (…...

dbt snapshot命令及应用示例

DBT是一种功能强大的数据转换工具&#xff0c;它使数据分析师和工程师能够更有效地转换仓库中的数据。dbt的一个关键特性是能够创建快照&#xff0c;这是跟踪数据随时间变化的一种方法。本文带你一起完成创建和使用dbt快照的过程。 理解缓慢变化维度 缓慢变化维度(scd)是数据仓…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...