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中,再由消费者慢慢消费

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

相关推荐
源代码•宸4 小时前
分布式缓存-GO(项目整体架构简介、Ubuntu 22.04 64位安装GoLang、安装Docker、解决Go module 的依赖问题)
经验分享·分布式·后端·ubuntu·缓存·docker·golang
Ttang234 小时前
【SpringCloud1】从单体架构到分布式系统架构
分布式·spring cloud·架构
博语小屋6 小时前
生产者消费者模型
linux·分布式·缓存
JIAWAP7 小时前
Redis数据安全性分析之RDB详解
数据库·redis·分布式·缓存
唐僧洗头爱飘柔95277 小时前
【区块链技术(04)】区块链核心技术:分布式网络的定义和特点;分布式账本的特性、实现与工作流程;共识机制
网络·分布式·区块链·共识算法·分布式账本·共识机制
松☆7 小时前
OpenHarmony + Flutter 混合开发进阶:实现跨设备分布式数据同步与状态共享
分布式·flutter
沧海寄馀生8 小时前
Apache Hadoop生态组件部署分享-Kafka
大数据·hadoop·分布式·kafka·apache
●VON8 小时前
跨设备状态同步实战:基于 HarmonyOS 分布式数据管理(DDM)构建多端协同应用
分布式·学习·华为·harmonyos·openharmony·von
无心水8 小时前
【分布式利器:大厂技术】5、华为分布式方案:国产化适配+政企高可靠,鲲鹏/昇腾生态核心技术
分布式·华为·gaussdb·分布式利器·华为分布式·国产化数据库·政企高可靠
沧海寄馀生8 小时前
Apache Hadoop生态组件部署分享-Spark
大数据·hadoop·分布式·spark·apache