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

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

相关推荐
发际线还在6 小时前
互联网大厂Java三轮面试全流程实战问答与解析
java·数据库·分布式·面试·并发·系统设计·大厂
chikaaa13 小时前
RabbitMQ 核心机制总结笔记
java·笔记·rabbitmq·java-rabbitmq
Francek Chen13 小时前
【大数据存储与管理】分布式数据库HBase:05 HBase运行机制
大数据·数据库·hadoop·分布式·hdfs·hbase
zzzzzwbetter14 小时前
Hadoop完全分布式部署-Master的NameNode以及Slaver2的DataNode未启动
大数据·hadoop·分布式
杨航 AI14 小时前
Frank-Job +Dify 实现openclaw Cron 分布式任务调度的AI化思考
人工智能·分布式
guoguangwu14 小时前
kafka容器增加健康检查
分布式·kafka
Java爱好狂.14 小时前
2026如何备战互联网大厂Java面试?
java·分布式·高并发·java面试·后端开发·java架构师·互联网大厂
wanhengidc15 小时前
服务器对于企业的作用
大数据·运维·服务器·分布式
墨着染霜华15 小时前
Java实战:封装Redis非阻塞分布式锁,彻底解决表单重复提交主键冲突
java·redis·分布式
隔壁小邓16 小时前
kafka怎么处理消息一致性
分布式·kafka