RocketMQ 消息中间件 知识点汇总

目录

  • RocketMQ
    • 1、什么是RocketMQ?
      • 常用术语:
    • 2、为什么需要消息队列
    • 3、什么是异步处理
    • 4、什么是服务解耦
    • 5、什么是流量控制
    • 6、消息队列两种模型
      • 队列模型:
      • 发布/订阅模型:
      • 总结:
    • 7、怎么保证消息不丢失
    • 8、如何处理消息被重复消费
      • **出现消息重复的情况:**
      • **解决方法:**
    • 9、如何保证消息的有序性
      • 全局有序
      • 部分有序
    • 10、如何处理消息堆积
      • **1、业务逻辑处理:**
      • **2、生产者producer限流**:限制发送消息的速度
      • **3、水平扩容:**
        • **问题:MQ积压了几百万数据**

RocketMQ

1、什么是RocketMQ?

RocketMQ 是一个消息中间件,使用的数据存储结构是队列,队列的特点是先进先出。消息队列就是一个使用队列来通信的组件。

常用术语:

RocketMQ(nameserver(broker(topic(MessageQueue(msg

Message: msg 消息

Message Queue: 消息存储的队列,可以有很多个消息队列,这些消息队列是存在broker里面的。

topic: 由一个或多个消息队列Message Queue 队列组成,为了做业务上的分类。

tag: 标签,对msg打个标签

broker: 这些消息队列肯定会保存在某一台生产服务器上,而这台生产服务器我们就称为 broker

nameserver: 服务注册中心(就是各个服务的节点信息注册到这个注册中心里面)

在这里插入图片描述

发送消息的是生产者producer,
接收消费消息的为消费者consumer,
消息队列服务端为broker。

消息从producer发往broker,broker将消息存储到本地,然后consumer从broker拉取消息,或者broker推送消息至consumer,最后消费。

在这里插入图片描述

为了提高并发度,



2、为什么需要消息队列

因为随着业务不断扩张,从之前的单体架构到现在的微服务架构,成百上千的服务之间的相互调用和依赖,我们需要一个东西来解耦各个服务之间的关系,控制资源合理的使用以及缓冲流量洪峰等等。

这个时候消息队列就应运而生。它常用来实现:异步处理、服务解耦、流量控制。



3、什么是异步处理

随着业务的发展,项目的请求链路会越来越长。比如之前的简单的查库存、下单,到后面的加上积分服务、短信服务等,这一路同步调用下来,客户可能就等着急了,这个时候就可以使用消息队列来进行异步处理。

调用链路长,响应就会变慢,对于一些不需要那么及时的功能,比如短信或者加积分之类的,只需要在下单结束后,扔个消息到消息队列中就可以直接返回响应了。积分服务和短信服务可以并行的消费这条消息。

优点:消息队列的异步处理可以减少请求的等待时间,还能让服务异步

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

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

相关文章

基于官方YOLOv4开发构建目标检测模型超详细实战教程【以自建缺陷检测数据集为例】

本文是关于基于YOLOv4开发构建目标检测模型的超详细实战教程,超详细实战教程相关的博文在前文有相应的系列,感兴趣的话可以自行移步阅读即可:《基于yolov7开发实践实例分割模型超详细教程》 《YOLOv7基于自己的数据集从零构建模型完整训练、…

【HuggingFace Transformer库学习笔记】基础组件学习:pipeline

一、Transformer基础知识 pip install transformers datasets evaluate peft accelerate gradio optimum sentencepiece pip install jupyterlab scikit-learn pandas matplotlib tensorboard nltk rouge在host文件里添加途中信息,可以避免运行代码下载模型时候报错…

代码随想录算法训练营第五十四天|392.判断子序列 115.不同的子序列

文档讲解:代码随想录 视频讲解:代码随想录B站账号 状态:看了视频题解和文章解析后做出来了 392.判断子序列 class Solution:def isSubsequence(self, s: str, t: str) -> bool:dp [[0] * (len(t)1) for _ in range(len(s)1)]for i in ra…

matlab三维地形图

matlab三维地形图 %%%%—————Code to draw 3D bathymetry—————————— %-------Created by bobo,10/10/2021-------------------- clear;clc;close all; ncdisp E:\data\etopo\scs_etopo.nc filenmE:\data\etopo\scs_etopo.nc; londouble(ncread(filenm,lon)); lat…

黑马点评笔记 分布式锁

文章目录 分布式锁基本原理和实现方式对比Redis分布式锁的实现核心思路实现分布式锁版本一Redis分布式锁误删情况说明解决Redis分布式锁误删问题分布式锁的原子性问题分布式锁-Redission分布式锁-redission可重入锁原理分布式锁-redission锁重试和WatchDog机制分布式锁-redissi…

java学习part10 this

90-面向对象(进阶)-关键字this调用属性、方法、构造器_哔哩哔哩_bilibili 1.java的this java的this性质类似cpp的this, 但它是一种引用,所以用 this. xxx来调用。 this代表当前的类的实例,所以必须和某个对象结合起来使用,不能…

C#学习相关系列之base和this的常用方法

一、base的用法 Base的用法使用场景主要可以概括为两种: 1 、访问基类方法 2、 调用基类构造函数 使用要求:仅允许用于访问基类的构造函数、实例方法或实例属性访问器。从静态方法中使用 base 关键字是错误的。所访问的基类是类声明中指定的基类。 例如&…

uniapp高德、百度、腾讯地图配置 SHA1

uniapp高德、百度、腾讯地图配置 SHA1 当winr弹出cmd弹框后输入 keytool -list -v -keystore debug.keystore 显示keytool 不是内部或外部命令,也不是可运行的程序或批处理文件。可以先看看是否有下载jdk且配置了环境变量,具体操作如下:keyto…

力扣每日一道系列 --- LeetCode 206. 反转链表

📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构探索 ✅LeetCode每日一道 🌅 有航道的人,再渺小也不会迷途。 LeetCode 206. 反转链表 思路一:头插 初始化两个指针,cur 和 newhead。…

nginx基础篇学习

一、nginx编译安装 1、前往nginx官网获取安装包 下载安装包 2、解压 3、安装 进入安装包 安装准备:nginx的rewrite module重写模块依赖于pcre、pcre-devel、zlib和zlib-devel库,要先安装这些库 安装: 编译: 启动&#xff…

【链表之练习题】

文章目录 翻转链表找到链表的中间节点返回倒数第k个节点合并两个有序链表判断链表是否回文注意 翻转链表 //反转链表//实质上是把每一个节点头插法,原本第一个节点变成最后一个节点public ListNode reverseList(){//链表为空if (head null){return null;}//链表只有一个节点if…

【Qt之QTextDocument】使用及表格显示富文本解决方案

【Qt之QTextDocument】使用 描述常用方法及示例使用QTextList使用QTextBlock使用QTextTable表格显示富文本结论 描述 QTextDocument类保存格式化的文本。 QTextDocument是结构化富文本文档的容器,支持样式文本和各种文档元素,如列表、表格、框架和图像。…