【RabbitMQ】初识 RabbitMQ

🥰🥰🥰来都来了,不妨点个关注叭!
👉博客主页:欢迎各位大佬!👈

在这里插入图片描述

文章目录

  • 1. MQ 是什么?
    • 1.1 MQ 本质
    • 1.2 系统间通信
  • 2. MQ的作用是什么?
    • 2.1 异步解耦
    • 2.2 流量削峰
    • 2.3 消息分发
    • 2.4 延迟通知
    • 2.5 日志处理
  • 3. 为什么选择 RabbitMQ?
  • 4. RabbitMQ 是什么?

本专栏为 RabbitMQ 相关知识~

小伙伴们都知道,Rabbit 是兔子这个意思,可以看到,互联网行业有很多公司,都喜欢使用动物命名产品,或者以动物的形象作为公司的logo,比如腾讯的企鹅等~

Rabbit 也是一个公司名,开发始于 2006年,之所以取名为 Rabbit,是因为兔子行动非常迅速并且繁殖起来非常疯狂,RabbitMQ 的开创者认为这个名字再合适不过了

MQ(Message queue)消息队列,RabbitMQ 是 Rabbit 企业下的一个消息队列产品,RabbitMQ 是一个实现了 AMQP 的消息队列,是当前主流的消息中间件之一!

AMQP 是什么呢?这里出现了一个我们不太熟悉的名词~

✨ AMQP(Advanced Message Queuing Protocol)即高级消息队列协议,是一个通用的应用层协议,提供统一消息服务的协议,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端或中间,开发语言等条件的限制。(抓重点,是一个通用的应用层协议,高级消息队列协议,协议嘛~就是一种约定)

1. MQ 是什么?

在互联网中,会经常使用 MQ 来作为消息通信服务,我们一起来看一下什么是 MQ 吧!

1.1 MQ 本质

MQ】(Message queue),消息队列,字面意思来看,本质是一个队列,FIFO先进先出,但这里的消息队列,只不过队列中存放的是消息,消息可以非常简单,也可以非常复杂

在这里插入图片描述

1.2 系统间通信

MQ 多用于分布式系统之间进行通信(系统通信,相当于数据传输)

这里补充介绍一下,系统之间的调用通常有两种方式:

  • 同步通信:直接调用对方的服务,数据从一端发出后立即就可以到达另一端
    在这里插入图片描述

  • 异步通信:数据从一端发出后,先进入一个容器进行临时存储,当达到某种条件后,再由这个容器发送给另一端(这个容器的一个具体实现就是MQ)
    在这里插入图片描述

RabbitMQ 就是 MQ 的一种实现

2. MQ的作用是什么?

MQ 的工作是:接收并转发消息

在这里插入图片描述

可以把 MQ 消息队列想象成一个仓库,采购部门进货之后,把货物放在仓库里,生产部门从仓库中取出零件,并加工成产品,这样类比,可能更帮助我们理解,苍龙放的是物品, MQ 放的是消息,仓库负责存储物品,并转发物品,同样的,MQ 负责存储和转发消息

MQ 的作用有如下,包括但不限于(这里列举几个常见的作用,在不同场景下的应用,有不同的作用)

2.1 异步解耦

在一些业务流程中,一些操作可能会非常耗时,但并不需要即时返回结果,可以借助 MQ 把这些操作异步化(可回顾这期内容,介绍了解耦等名词【多线程】阻塞队列,解耦,就是依赖关系减弱)

举一个栗子,比如在用户注册的使用,有以下三个事情需要做:
1)用户信息校验
2)插入数据库(其实这个操作,用户的数据就已经在数据库了)
3)发送邮件(告诉用户,比如,恭喜你,注册成功等类似信息)

在这里插入图片描述
用户注册后发送注册短信或邮件通知,可以作为异步任务处理,而不必等待这些操作完成后才告知用户注册成功

2.2 流量削峰

在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见,如果以能处理这类峰值为标准而投入资源,这无疑是巨大的资源浪费,使用 MQ 能够使关键组件支撑突发访问压力,不会因为突发流量而崩溃,比如秒杀活动或者促销活动,可以使用 MQ 来控制流量,将请求排队,系统再根据自己的处理能力逐步处理这些请求,使请求是平缓的速度,而不是猛增猛降

举一个生活中常见的栗子,比如某一些店面做热销活动或者周年庆的时候,肯定特别多人,流量特别大,店里的人完全忙不过来,如果请几个人帮忙,可以解决这个问题,但是,热销活动一过去,这些请来的人如何处理呢?此时,门店里也不需要这么多人手呀!这时,需要一个像 MQ 的东西,比如设置一个区域,进行排队,在流量大的时候,顶住压力,控制流量,门店再根据自己的处理能力,逐步处理这些请求~还有,比如在节假日,抢票的时候,流量特别大,尤其是在春节的时候,这个时候,可以有一个像 MQ 的东西进行处理,处理的时候,弹出一个界面,正在排队中…有两种结果,买票成功与买票失败,这样能够有效顶住流量剧增的压力

2.3 消息分发

多个系统需要对同一数据做出响应的时候,可以使用 MQ 进行消息分发,比如支付成功之后,支付系统可以向 MQ 发送消息,其它系统订阅该消息,而不需要轮询数据库

举一个栗子,比如在购物的时候,下单成功,有以下几个事情需要做:
1)向商家发送通知
2)向平台财务部门发送通知
3)…

在这里插入图片描述

2.4 延迟通知

需要在特定时间后发送通知的场景中,可以使用 MQ 的延迟消息功能,比如,在电子商务平台中,如果用户下单后一定时间内未支付,可以使用延迟队列在超时后自动取消订单(可以把 MQ 想象一个仓库,暂时存储了这些消息,到一定时候进行转发~)

2.5 日志处理

MQ 消息队列还可以用于日志处理,例如,Kafka 等消息队列中间件可以接收并存储大量的日志数据,供日志处理应用进行订阅和消费,通过这种方式可以简化日志处理的架构,提高日志处理的效率和可靠性

3. 为什么选择 RabbitMQ?

可以看到,上述还提到了 Kafka 消息队列中间件,目前业界有很多的MQ产品,比如RabbitMQ,RocketMQ,ActiveMQ,Kafka,ZeroMQ等等,还记得 初识Redis 这期内容嘛,Redis 的初心其实是做消息队列的~ 这些消息队列,各有适应的场景,各有侧重点,没有好坏之分,这里谈论的是合不合适,在实际选择的时候,需要结合自身需求和MQ 产品特征,一起综合考虑。

这里介绍当下最主流的三种 MQ 产品:

  • Kafka:Kafla 一开始的目的就是用于日志收集和传输,追求高吞吐量,性能卓越,单机吞吐量达到十万级,在日志领域比较成熟,功能较为简单,主要支持简单的 MQ 功能,假如现在有一个场景,有日志的采集需求,那么首选的消息队列是 Kafka!
  • RocketMQ:RocketMQ 采用 Java 语言开发,由阿里巴巴开源,后捐赠给 Apache,它在设计的时候,借鉴了 Kafka,当然,做出了自己的改进,达到青出于蓝而胜于蓝的效果,经过多年双十一的洗礼,在可靠性、可用性以及稳定性方面都有着出色的表现,适用对于可靠性比较高,并且并发比较大的场景,比如互联网金融,但支持的客户端语言较少,并且社区活跃度一般
  • RabbitMQ采用 Erlang 语言开发MQ 功能比较完备,且几乎支持所有的主流语言,开源提供的界面也十分的友好,性能较好,吞吐量能达到万级(Kafka 吞吐量达到十万级),社区活跃度比较高,比较适合中小型公司,数据量没有那么那么大,且并发没有那么高的场景

综上所述,RabbitMQ的综合能力较强,并且我们的项目没有那么那么大的高并发,RabbitMQ 社区比较活跃,同时RabbiMQ 管理界面友好,因此,本专栏学习 MQ 选择了 RabbitMQ ,小伙伴们~接下来我们主要一起来学习RabbitMQ的使用。

4. RabbitMQ 是什么?

可以通过 RabbitMQ 官网,更进一步了解

RabbitMQ 是采用 Erlang 语言实现AMQP(Advanced Message Queuing Protocol)高级消息队列协的消息中间件,它最初起源于金融系统领域,为了在分布式系统中存储和转发消息设计的~

RabbitMQ 发展到今天,已经被越来越多的人认可!尤其在互联网公司,已经有着大规模的场景应用,这和它的易用性、扩展性、可靠性和高可用性等方面密切相关。因此,本专栏,将带着小伙伴们一起深入了解一下 RabbitMQ~

💛💛💛本期内容回顾💛💛💛

在这里插入图片描述

✨✨✨本期内容到此结束啦~


下期内容预告:RabbitMQ 在 Ubuntu 上的安装

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

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

相关文章

【ProtoBuf】ProtoBuf基础与安装

本篇文章介绍 C 使用方向 文章目录 ProtoBuf简介ProtoBuf安装WindowsLinux ProtoBuf简介 ProtoBuf(全称为 Protocol Buffer)是一种序列化结构数据的方法 序列化是将对象转换为可存储的或传输的格式的过程,通常用于数据交换或持久化存储。我们在C/Java中编写的类不…

2.13寸电子墨水屏HINK-E0213+esp8266

记录好数字 2.13寸电子墨水屏HINK-E0213esp8266 声明:大部分资料来源于微雪电子http://微雪电子-官网 https://www.waveshare.net/ 前言 很久以前买的一块电子墨水屏,运气很好,这个型号HINK-E0213资料很全,而且微雪官网也有相关电路资料http://2.13inch e-Paper HAT - Waves…

【GaussDB】产品简介

产品定位 GaussDB 200是一款具备分析及混合负载能力的分布式数据库,支持x86和Kunpeng硬件架构,支持行存储与列存储,提供PB(Petabyte)级数据分析能力、多模分析能力和实时处理能力,用于数据仓库、数据集市、实时分析、实时决策和混…

【UI】将 naive ui 的 message 封装进axios 中,关于naiveui的message相关的用法

文章目录 前言在setup外进行使用直接包裹使用vue 单文件中使用 参考文章: 关于naiveui的message相关的用法 前言 最近新建了一个vite vu3 的项目,完全是从0 到1 ,封装到request 的时候 想对axios 请求做一个全局的处理,但发现…

【尚硅谷】FreeRTOS学笔记(更新中更新时间2024.10.12)

在网上看到的一段很形象的描述,放在这里给大家娱乐一下。 裸机开发:n个人拉屎,先进去一个拉完,下一个再来。看门狗:如果有人拉完屎还占着,茅坑刷视频,把他拖出去中断系统:n个人拉屎&…

两三年没涨薪了

前几天到上海见合伙人,有好几位合伙人也都是中型或者是大厂的骨干,基本上是在P8这个级别,大家谈到了几个共同点。 几个典型的现象说一下,既是新闻,也是旧故事。天下的事都雷同。第一个,老板换了&#xff0c…

LVS-DR+Keepalived 高可用群集部署

LVS-DRKeepalived 高可用群集部署 Keepalived 的工作原理LVSKeepalived 高可用群集部署配置负载调度器(主、备相同)关闭防火墙和核心防护及准备IPVS模块配置keeplived(主、备DR 服务器上都要设置)启动 ipvsadm 服务调整 proc 响应…

机器学习中的模型设计与训练流程详解

目录 前言1. 模型设计1.1 数据特性分析1.2 计算资源限制1.3 应用场景需求 2. 模型训练2.1 训练集与验证集的划分2.2 损失函数的选择2.3 模型参数更新 3. 优化方法3.1 梯度下降法3.2 正则化方法 4. 模型测试4.1 性能评估指标4.2 模型的泛化能力 5. 模型选择5.1 数据规模与模型复…

集合框架06:Vector集合使用

1.视频链接:13.13 Vector使用_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1zD4y1Q7Fw/?p13&spm_id_from333.1007.top_right_bar_window_history.content.click&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b52.代码示例: package com.yu…

Fetch 与 Axios:JavaScript HTTP 请求库的详细比较

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…

初知C++:AVL树

文章目录 初知C:AVL树1.AVL树的概念2.AVL树的是实现2.1.AVL树的结构2.2.AVL树的插入2.3.旋转2.4.AVL树的查找2.5.AVL树平衡检测 初知C:AVL树 1.AVL树的概念 • AVL树是最先发明的自平衡⼆叉查找树,AVL是⼀颗空树,或者具备下列性…

python如何对变量赋值

Python 中的变量赋值不需要类型声明。 每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。 每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。 等号()用来给变量赋值。 等号(&…

SpringBoot 整合 阿里云 OSS图片上传

一、OOS 简介 ‌阿里云OSS(Object Storage Service)是一种基于云存储的产品,适用于存储和管理各种类型的文件,包括图片、视频、文档等。‌ 阿里云OSS具有高可靠性、高可用性和低成本等优点,因此被广泛应用于各种场景&…

2013年国赛高教杯数学建模A题车道被占用对城市道路通行能力的影响解题全过程文档及程序

2013年国赛高教杯数学建模 A题 车道被占用对城市道路通行能力的影响 车道被占用是指因交通事故、路边停车、占道施工等因素,导致车道或道路横断面通行能力在单位时间内降低的现象。由于城市道路具有交通流密度大、连续性强等特点,一条车道被占用&#x…

el-image预览时和el-table边框出现样式穿透问题处理

el-image预览时和el-table边框出现样式穿透问题处理 如图所示 我们只需要在当前组件加一个css即可解决问题 <style lang"scss" scoped> :deep(.el-table__cell) {position: static !important; } </style>

【Golang】关于Go语言中的定时器原理与实战应用

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

结构体 超详解

目录 1. 结构体的声明与创建 1.1 结构体类型的定义声明&#xff08;类型&#xff09; 1.2 结构体变量的创建和初始化&#xff08;变量&#xff09; 1.3 结构体变量的特殊声明&#xff08;类型和变量&#xff09; 1.3.1 定义时创建变量 1.3.2 结构体的不完全声明&#xff…

解决重写QSilder::sliderPress后点击位置与滑块显示位置不一样的问题

如下代码所示&#xff0c;我是用的是事件过滤器&#xff0c;也可以重写QSlider。 bool KuGouApp::eventFilter(QObject *watched, QEvent *event) {if(watched ui->progressSlider) {if (event->type()QEvent::MouseButtonPress) //判断类型{auto mouseEvent…

XILINX MIG驱动

简介 框架图 本章节主要针对MIG读写做详细介绍,首先创建BLOCK DESIGN,工程连接如下图所示: MIG IP介绍 DATAMOVER的配置这里不再做介绍,结合上篇文章讲到DATAMOVER对BRAM进行读写操作,这里通过AXI桥再加一个MIG模块,MIG模块的配置和说明如下: 1、Clock Period:…

FPAG学习(5)-三种方法实现LED流水灯

目录 1.移位实现LED流水灯 1.1创建工程及源文件代码 1.1.1源代码 1.1.2仿真代码 1.1.3仿真 1.2实验结果 1.2.1总结 2.循环移位实现LED流水灯 3.38译码器实现LED流水灯 3.1原理 3.2源程序 1.移位实现LED流水灯 1.1创建工程及源文件代码 1.1.1源代码 利用计数器计数到…