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.mzph.cn/news/167923.shtml

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

相关文章

流量分析-PhishingEmail_WriteUp

一、题目问题 问题1:黑客的email名称 问题2:黑客向几人发送了钓鱼邮件 问题3:黑客传输的木马文件名 问题4:下载并运行了木马文件的人的email名称和ip地址,用“-”连接 问题5:黑客用于反弹shell的主机i…

什么葡萄酒会适用这种双重滗析方法呢?

滗析有两个主要目的,一种是去除陈年或未经过滤的葡萄酒中的沉淀物。虽然沉淀物不会对你造成任何伤害,但当喝葡萄酒满嘴都是葡萄沉淀物时是一件很糟糕的事。其次,倾析葡萄酒是可以让葡萄酒“呼吸”与氧气接触的,氧气可以软化单宁&a…

二维数值型数组例题

1、单位矩阵初始化 题目描述 对用作单位矩阵的数组初始化。单位矩阵在主对角线上的值为1,而其他的地方的值为0,并且主对角线上的行、列下标是一样的。 输入要求 输入一个整数n表示矩阵的行数 输出要求 输出n*n的单位矩阵。数据之间以空格间隔&…

LeetCode Hot100 102.二叉树的层序遍历

题目&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 方法&#xff1a;迭代 class Solution {public List<List<Integer>> levelOrder(TreeNode root) {if …

C语言——输入一个4位正整数,输出其逆数。

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i,j 0;int a1,a2,a3,a4;printf("输入一个4位正整数&#xff1a;\n");scanf("%d",&i);a1 i/1000; a2 i/100%10; a3 i/10%10; a4 i%10; printf("千位a1%d,百位a…

【JavaFx】利用JavaFx写一个登录页面

以下是一个基本的JavaFX登录页面示例: import javafx.application.Application; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.co…

mysql的alter怎么使用?

在MySQL中&#xff0c;ALTER语句用于修改数据库的表结构。下面是一些ALTER语句的示例用法&#xff1a; 1. 添加列&#xff1a; ALTER TABLE 表名 ADD 列名 数据类型; 2. 修改列的数据类型&#xff1a; ALTER TABLE 表名 MODIFY 列名 新数据类型; 3. 修…

新人工作方法论:高效率的工作

引言&#xff1a; 转眼间入职半载&#xff0c;在工作期间曾迷茫、困惑&#xff0c;深深的感受到职场身份的转变带来的痛苦。痛苦的原因不仅仅包括学生时代自己闷头做事的思维习惯与团队合作需求的差异性&#xff0c;也包括缺乏体系的工作方法。 自己在网络上查了一些方法论&a…

80C51单片机----数据传送类指令

目录 一.一般传送指令&#xff0c;即mov指令 1.16位传送&#xff08;仅1条&#xff09; 2.8位传送 &#xff08;1&#xff09;目的字节为A&#xff08;累加器&#xff09; &#xff08;2&#xff09;目的字节为Rn(工作寄存器) &#xff08;3&#xff09;目的字节为direct…

超分辨率重建

意义 客观世界的场景含有丰富多彩的信息&#xff0c;但是由于受到硬件设备的成像条件和成像方式的限制&#xff0c;难以获得原始场景中的所有信息。而且&#xff0c;硬件设备分辨率的限制会不可避免地使图像丢失某些高频细节信息。在当今信息迅猛发展的时代&#xff0c;在卫星…

导入PIL时报错

在导入PIL时,报以下错误: 查找原因 参考博客 Could not find a version that satisfies the requirement PIL (from versions: ) No matching distributi-CSDN博客,按照wheel后,安装PIL时,报如下的错误。 查找说是python版本与wheel文件版本不同,确认本机python版本 …

C++ 指针进阶:动态分配内存

工作原理 malloc 是 stdlib.h 库中的函数,声明为 void *__cdecl malloc(size_t _Size); 原理: malloc 函数沿空闲链表(位于内存 堆空间 中)申请一块满足需求的内存块,将所需大小的内存块分配给用户剩下的返回到链表上; 并返回指向该内存区的首地址的指针,意该指针的类型…

ElasticSearch之cat allocation API

查看各节点上各个shard的硬件使用情况&#xff0c;命令样例如下&#xff1a; curl -X GET "https://localhost:9200/_cat/allocation?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"执行结果如下&#x…

MyBatis常见面试题总结

MyBatis常见面试题总结 #{} 和 ${} 的区别是什么&#xff1f; ${}是 Properties 文件中的变量占位符&#xff0c;它可以用于标签属性值和 sql 内部&#xff0c;属于静态文本替换&#xff0c;比如${driver}会被静态替换为com.mysql.jdbc. Driver。 #{}是 sql 的参数占位符&…

Nginx模块开发之http handler实现流量统计(2)

文章目录 一、概述二、Nginx handler模块开发2.1、代码实现2.2、编写config文件2.3、编译模块到Nginx源码中2.4、修改conf文件2.5、执行效果 总结 一、概述 上一篇【Nginx模块开发之http handler实现流量统计&#xff08;1&#xff09;】使用数组在单进程实现了IP的流量统计&a…

音视频项目—基于FFmpeg和SDL的音视频播放器解析(二十二)

介绍 在本系列&#xff0c;我打算花大篇幅讲解我的 gitee 项目音视频播放器&#xff0c;在这个项目&#xff0c;您可以学到音视频解封装&#xff0c;解码&#xff0c;SDL渲染相关的知识。您对源代码感兴趣的话&#xff0c;请查看基于FFmpeg和SDL的音视频播放器 如果您不理解本…

MySQL 排序和分组怎么做?

文章目录 前言MySQL 排序语法在命令提示符中使用 ORDER BY 子句在PHP脚本中使用 ORDER BY 子句 MySQL 分组GROUP BY 语法实例演示使用 WITH ROLLUP 后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Mysql &#x1f431;‍&#x1f453;博…

Cookie的基本使用

JavaScript Cookie&#xff08;JavaScript 的 Cookie&#xff09;是一种在Web浏览器中存储和检索用户信息的机制。它允许网站在用户计算机上存储小型数据片段&#xff0c;以便在之后的会话中使用这些数据。Cookie通常用于持久化用户首选项、跟踪用户行为和提供个性化体验。 通…

堆的实现(堆的插入、堆的删除等)超级全

堆的实现&#xff08;堆的插入、堆的删除等&#xff09;超级全 文章目录 堆的实现&#xff08;堆的插入、堆的删除等&#xff09;超级全一、前期基础知识1.树结构①树的定义②树的相关概念③二叉树④满二叉树和完全二叉树a.满二叉树b.完全二叉树 ⑤二叉树的性质⑥二叉树顺序结构…

每日OJ题_算法_双指针_力扣11. 盛最多水的容器

力扣11. 盛最多水的容器 11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; 难度 中等 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成…