RabbitMQ概述

在这里插入图片描述

前言

看到 RabibtMQ 的时候我们首先会想它到底是什么呢?RabbitMQ 其实可以分为两个部分:Rabbit + MQ,Rabbit 是指 Rabibt 公司,MQ 指的是 Message Queue,即消息队列,合起来理解 RabbitMQ 就是 Rabbit 公司企业下的一个消息队列产品。

RabbitMQ 是一个实现了 AMQP 的消息队列服务,是当前主流的消息中间件之一。AMQP ,即 Advanced Message Queuing Protocol(高级消息队列协议),是一个通用的应用层协议,提供统一消息消息服务的协议,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端或者中间件,开发语言等条件的限制。

什么是MQ

当大致知道了什么是 RabbitMQ,我们来详细的学习一下什么是 MQ(Message Queue)。既然是 Queue,那么他就具有队列的特性 FIFO,先进先出,Message Queue 与普通的 Queue 不同的就是 Message Queue 中存放的是消息(message)。当然这些消息可以很简单也可以很复杂,但是他们统称为消息。MQ 多用于分布式系统之间的通信。

系统之间的调用通常有两种方式:1. 同步通信 2. 异步通信

同步通信

同步通信是一种比特同步通信技术,要求发收双方具有同频同相的同步时钟信号。在同步通信中,发送方和接收方在传送数据时需要保持严格的同步,以确保数据的正确传输。简单来说就是,数据从一端发出后立即就可以到达另一端。

在这里插入图片描述
同步通信的好处呢就是系统 B 对于系统 A 传递来的数据,系统 B 可以立即对这些数据进行处理并返回,响应速度就很快。但是这样的话,如果系统 B 短时间内接收到大量的数据请求的话,由于硬件或者软件上的限制,就无法对这些全部的请求做出处理,甚至还可能导致我们的系统 B 发生崩溃宕机。

所以在处理高请求量的时候,我们往往会将同步通信和异步通信结合起来使用。

异步通信

异步通信是一种非同步的通信方式,发送方和接收方在执行相应操作时不需要同时存在或同时运行。在异步通信中,每个字符的传输都是独立的,字符之间可以有任意的时间间隔。

数据从一端发出后,先进入一个容器中进行临时存储,当达到某种条件之后,再由这个容器发送给另一端,容器的一个具体的实现就是 MQ。

在这里插入图片描述
对于系统 A 传递来的消息,不必直接传递给系统 B,而是先存放在消息队列中,当系统 B 处理完成当前消息之后,会向消息队列订阅消息,获得下一个消息,然后进行处理。这样就算系统 A 或者其他系统向系统 B 短时间内发送大量的消息,这些也是存放在消息队列中的,不会对系统 B 造成太大的压力,实现了削峰的效果。

MQ的作用

  1. 异步处理
  • 提升系统响应速度:通过将耗时较长的操作异步化,MQ允许生产者在发送消息后立即返回,而不需要等待消费者处理完成。这样可以显著提升系统的响应速度和用户体验。
  • 提高系统吞吐量:通过异步处理,系统能够同时处理更多的请求,从而提高单位时间内处理请求的数目(吞吐量)。
  1. 应用解耦
  • 降低系统耦合度:MQ作为一个中介,使得生产者和消费者之间不需要直接交互,从而降低了系统之间的耦合度。这种解耦提高了系统的容错性和可维护性。
  • 灵活扩展:当系统需要增加新的消费者或生产者时,只需要让它们与MQ进行交互即可,而不需要修改其他系统的代码。
  1. 削峰填谷
  • 应对突发流量:在高峰期,系统可能会接收到大量的请求,这些请求如果直接处理可能会导致系统崩溃。MQ可以将这些请求暂时保存起来,然后系统可以按照自己的消费能力逐步处理这些请求,从而避免系统崩溃。
  • 平衡负载:通过MQ,系统可以更加灵活地分配资源,确保在高负载情况下仍然能够稳定运行。
  1. 支持多种消息模型
  • 发布/订阅(Pub/Sub):同一个topic下的消息会被所有的订阅者消费。
  • 点对点(P2P):消息只会被一个消费者消费。
  1. 可靠性
  • 确保消息传递:MQ通常提供多种机制来确保消息的可靠传递,如消息确认、持久化等。
  • 容错性:即使部分消费者或生产者出现故障,MQ也能保证消息不会丢失,并在故障恢复后继续传递消息。
  1. 延迟通知
  • 在需要特定时间后发送通知的场景中,可以使用 MQ 的延迟消息功能,比如在电子商务平台中,如果用户下单一定时间内未支付,可以使用延迟队列在超时后自动取消订单。

为什么选择RabbitMQ作为MQ呢

当前业界有很多的 MQ 产品,例如 RabbitMQ、RocktMQ、ActiveMQ、Kafka、ZeroMQ等,也有直接使用 Redis 作为消息队列的案例,这些消息队列各有侧重,也没有好坏,只有适合不合适,在实际选择使用哪个 MQ 的时候需要结合实际需求来进行选择。

1.Kafka

Kafka 一开始的目的就是用于日志收集和传输,追求高吞吐量,性能卓越,单机吞吐达到十万级,在日志领域比较成熟,但是功能较为简单,主要支持简单的 MQ 功能,如果有日志采集需要肯定就是首选 Kafka 了。

2.RocketMQ
RocketMQ 采用 Java 语言开发,由阿里巴巴开源,后捐赠给了 Apache。
它在设计的时候借鉴了 Kafka,并做出了一些自己的改进,青出于蓝而胜于蓝,经过多年双十一的洗礼,在实用性、可靠性和稳定性方面都有出色的表现,适合对于可靠性比较高,且并发比较大的场景,比如互联网金融。但是支持的客户端语言不多,且社区活跃度一般

3.RabbitMQ
采用 Erlang 语言开发,MQ 功能比较完备,且几乎支持所有的主流语言,开源提供的页面也非常友好,性能较好,吞吐量也可以达到万级,社区活跃度也比较高,比较适合中小型公司,数据量没那么大,且开发没有那么高的场景。

所以综合起来,RabbitMQ 适合初学者学习,且功能比较完善,是属于我们个人开发的最佳选择。

RabbitMQ 官网 https://www.rabbitmq.com/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不能再留遗憾了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值