【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 上的安装

相关推荐
节点。csn1 小时前
Hadoop yarn安装
大数据·hadoop·分布式
NiNg_1_2343 小时前
基于Hadoop的数据清洗
大数据·hadoop·分布式
隔着天花板看星星4 小时前
Spark-Streaming集成Kafka
大数据·分布式·中间件·spark·kafka
技术路上的苦行僧8 小时前
分布式专题(8)之MongoDB存储原理&多文档事务详解
数据库·分布式·mongodb
龙哥·三年风水8 小时前
workman服务端开发模式-应用开发-后端api推送修改二
分布式·gateway·php
小小工匠9 小时前
分布式协同 - 分布式事务_2PC & 3PC解决方案
分布式·分布式事务·2pc·3pc
Allen Bright9 小时前
Spring Boot 整合 RabbitMQ:从入门到实践
spring boot·rabbitmq·java-rabbitmq
闯闯的日常分享11 小时前
分布式锁的原理分析
分布式
太阳伞下的阿呆12 小时前
kafka常用命令(持续更新)
分布式·kafka
Java程序之猿12 小时前
微服务分布式(二、注册中心Consul)
分布式·微服务·consul