1.RabbitMQ介绍

一、MQ是什么?为什么使用它

MQ(Message Queue,简称MQ)被称为消息队列。

是一种用于在应用程序之间传递消息的通信方式。它是一种异步通信模式,允许不同的应用程序、服务或组件之间通过将消息放入队列中来进行通信。这些消息可以包含数据、命令、事件等,从而实现系统之间的解耦和异步处理。

消息队列能给系统带来的好处有下面几点

  • 异步通信
  • 程序解耦
  • 流量削峰

当然有好处也有坏处

  1. 程序复杂性提高
  2. 数据一致性问题
  3. 系统可用性降低

1.RabbitMQ

RabbitMQ 是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。

首先RabbitMQ基于AMQP协议开发,所以很多基于AMQP协议的功能RabbitMQ都是支持的,比如SpringCloud中的消息总线bus

其次RabbitMQ是基于Erlang编写,这是也是RabbitMQ天生的优势,Erlang被称为面向并发编程的语言,并发能力极强,在众多的MQ中,RabbitMQ的延迟特别低,在微秒级别,所以一般的业务处理RabbitMQ比Kafka和RocketMQ更有优势。

最后RabbitMQ提供自带了图形化界面,操作方便,还自带了多种集群模式,可以保证RabbitMQ的高可用,并且SpringBoot默认就整合RabbitMQ,使用简单方便。

二、为什么使用它

第1个场景:

在微服务架构下,可能一个业务会出现同时调用多个其他服务的场景,而且这些服务之间一般会用到Feign的方式进行轻量级的通讯,如果存在一个业务,用户创建订单成功后,还需要去给用户添加积分、通知商家、通知物流系统、扣减商品库存,而在执行这个操作时,如果任意一个服务出现了问题,都会导致整体的下单业务失败,并且会导致给用户反馈的时间延长。这时就造成了服务之间存在一个较高的耦合性的问题。可能有些服务不需要一些及时的性。比如积分服务、消息服务等等。

第2个场景:

在我们在做一些秒杀业务时,可能会在某个时间点突然出现大量的并发请求,这可能已经远远超过服务器的并发瓶颈,这时我们需要做一些削峰的操作,也就是将大量的请求缓冲到一个队列中,然后慢慢的消费掉。

第2个场景解决方案

忽然的海量请求可以存储在RabbitMQ的队列中,然后由消费者慢慢消费掉,RabbitMQ的队列本身就可以存储上千万条消息

第1个场景解决方案:

在调用其他服务时,我们把一些不具有及时性的任务放到RabbitMq中,再由消费者慢慢消费

当然除了上面这些场景,用到消息队列的地方很多,看大家对自己系统的设计,主要理解消息队列能干什么。

相关推荐
方圆想当图灵2 小时前
如何让百万 QPS 下的服务更高效?
分布式·后端
Dobby_057 小时前
【Hadoop】分布式文件系统 HDFS
大数据·hadoop·分布式
哈哈很哈哈7 小时前
Spark 核心 RDD详解
大数据·分布式·spark·scala
项目題供诗8 小时前
Hadoop(十一)
大数据·hadoop·分布式
学习中的阿陈12 小时前
Hadoop伪分布式环境配置
大数据·hadoop·分布式
葵野寺13 小时前
【RelayMQ】基于 Java 实现轻量级消息队列(九)
java·开发语言·rabbitmq·java-rabbitmq
CesareCheung13 小时前
JMeter分布式压力测试
分布式·jmeter·压力测试
失散1314 小时前
分布式专题——10.5 ShardingSphere的CosID主键生成框架
java·分布式·架构·分库分表·shadingsphere
Cxzzzzzzzzzz18 小时前
RabbitMQ 在实际开发中的应用场景与实现方案
分布式·rabbitmq
在未来等你18 小时前
Kafka面试精讲 Day 16:生产者性能优化策略
大数据·分布式·面试·kafka·消息队列