消息队列(MQ)的作用

消息队列(MQ)的作用

消息队列的作用主要有以下三点:

  1. 异步处理
  2. 应用解耦
  3. 流量削峰

情景描述
以用户注册为例,系统在用户注册后会调用邮件服务功能发送注册信息邮件给客户,下面是各服务的调用时间

服务类型 服务耗时
新增用户 0.5s
邮件服务 5s
发送用户注册信息至MQ 0.5s
  • 异步处理

在未使用RabbitMQ时候,用户需要等待时间5.5s(新增用户0.5s+调用邮件服务5s)

使用RabbitMQ后,唯一不同是在执行新增用户服务(0.5s)后没有调用邮件服务,而是将用户注册信息发送至MQ(耗时0.5s),故总耗时是1s

因此,使用RabbitMQ的第一个特点是异步处理程序,达到减少用户等待时间,优化用户体验感。
在这里插入图片描述

  • 应用解耦
    再说一下使用消息队列的应用解耦特点:
    还是上面这幅图,假如邮件服务程序所在的服务器宕机,那么没有使用消息队列情况下代码会出现异常报错,无法返回结果给用户。
    使用消息队列后,服务端在完成新增用户和将注册用户信息发送至RabbitMQ后就将注册结果返回给用户,邮件服务等到RabbitMQ消费者消费后再执行,就算邮件服务所在服务器宕机,后面也会有专业的运维人员进行维护邮件服务(消息经持久化,未被消费会一直存在)。同样能给予用户舒适的体验感。

在这里插入图片描述

  • RabbitMQ+Redis完成流量削峰

假如有100000个请求

统计请求数量,将其存放至redis,
系统会将前1000个请求存放到RabbitMQ中。创建订单处理服务来消费存放在MQ中信息,处理完毕后再将信息存放至mysql数据库。
假如超过1000请求数,系统会直接将后面的请求返回信息(“商品已售罄”),同时将数据写入mysql数据库作为相关的数据记录。

Memorial Day is 513 days
I miss you
xiaokeai

猜你喜欢

转载自blog.csdn.net/weixin_42914989/article/details/113977846