【RabbitMQ】初识 RabbitMQ

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

文章目录

  • [1. MQ 是什么?](#1. MQ 是什么?)
    • [1.1 MQ 本质](#1.1 MQ 本质)
    • [1.2 系统间通信](#1.2 系统间通信)
  • [2. MQ的作用是什么?](#2. MQ的作用是什么?)
    • [2.1 异步解耦](#2.1 异步解耦)
    • [2.2 流量削峰](#2.2 流量削峰)
    • [2.3 消息分发](#2.3 消息分发)
    • [2.4 延迟通知](#2.4 延迟通知)
    • [2.5 日志处理](#2.5 日志处理)
  • [3. 为什么选择 RabbitMQ?](#3. 为什么选择 RabbitMQ?)
  • [4. 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 上的安装

相关推荐
大新新大浩浩3 小时前
arm64适配系列文章-第六章-arm64环境上rabbitmq-management的部署,构建cluster-operator
rabbitmq·arm
躺不平的理查德4 小时前
General Spark Operations(Spark 基础操作)
大数据·分布式·spark
talle20214 小时前
Zeppelin在spark环境导出dataframe
大数据·分布式·spark
渣渣盟4 小时前
大数据开发环境的安装,配置(Hadoop)
大数据·hadoop·分布式
Angindem5 小时前
SpringClound 微服务分布式Nacos学习笔记
分布式·学习·微服务
电脑玩家粉色男孩8 小时前
2、Ubuntu 环境下安装RabbitMQ
linux·rabbitmq
龙仔72513 小时前
离线安装rabbitmq全流程
分布式·rabbitmq·ruby
〆、风神16 小时前
Spring Boot 整合 Lock4j + Redisson 实现分布式锁实战
spring boot·分布式·后端
胡萝卜糊了Ohh17 小时前
kafka
分布式·kafka