一、MQ简介
MQ全称Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信,主要功能业务解耦
二、常见的MQ产品
RabbitMQ、RocketMQ、Kafka、ActiveMQ
三、为什么要用MQ?
3.1、异步处理
应用场景:当用户进行注册时,需要发送注册邮件和注册短信,传统的做法有两种:1.串行的方式 2.并行的方式
3.1.1.串行方式
将注册信息写入到数据库之后,发送注册邮件,再发送注册短信,全部完成后返回给客户端,此时存在一个问题,邮件和短信并不是必须的,它只是一个通知,这种做法让客户端等待着没有必要的东西
3.1.2.并行方式
将注册信息写入数据库后,发送邮件的同时,发送短信,完成之后,返回给客户端,并行的方式减少了处理的时间
3.1.3消息队列
引入消息队列后,可以将发送邮件,发送短信这些没必要的业务进行逻辑业务处理
引入消息队列后,用户的响应时间就等于写入数据库的时间+写入消息队列时间,引入消息队列处理后,响应时间大概是串行的1/3,并行的1/2。
3.2、应用解耦
应用场景:在双十一购物节时,用户购买商品下单后,订单系统需要通知库存系统,传统的做法是订单系统调用库存系统的接口
这种做法存在一个缺点:
当库存系统发生故障时,下单就会失败。订单系统和库存系统存在高耦合
引入消息队列
订单系统:用户下单后,订单系统完成持久化操作,将消息写入消息队列中,返回用户下单成功的消息
库存系统:订阅下单消息,获取下单消息,进行拆订单操作。就算库存系统出现故障后,消息队列也能 保证消息的可靠投递,不会导致消息丢失
3.3、流量削峰
应用场景:在购物软件举行秒杀活动时,流量会非常大,会导致应用挂掉,为了解决这个问题,一般在应用前端加入消息队列
作用
- 可以控制活动人数,超过一定的阀值的订单直接丢弃
- 可以缓解短时间的高流量压垮应用