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

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

相关推荐
冷崖7 小时前
消息队列-kafka(一)
分布式·kafka
不光头强10 小时前
kafka学习要点
分布式·学习·kafka
難釋懷10 小时前
分布式锁-redission可重入锁原理
分布式
AC赳赳老秦11 小时前
外文文献精读:DeepSeek翻译并解析顶会论文核心技术要点
前端·flutter·zookeeper·自动化·rabbitmq·prometheus·deepseek
珠海西格11 小时前
远动通信装置为何是电网安全运行的“神经中枢”?
大数据·服务器·网络·数据库·分布式·安全·区块链
CTO Plus技术服务中12 小时前
分布式存储HBase开发与运维教程
运维·分布式·hbase
飞乐鸟13 小时前
Github 16.8k Star!推荐一款开源的高性能分布式对象存储系统!
分布式·开源·github
panzer_maus13 小时前
分布式锁的概念
分布式
Lansonli14 小时前
大数据Spark(七十九):Action行动算子countByKey和countByValue使用案例
大数据·分布式·spark
少许极端15 小时前
Redis入门指南(八):从零到分布式缓存-集群机制、缓存机制、分布式锁
redis·分布式·缓存·分布式锁