消息队列(MQ)的作用
消息队列的作用主要有以下三点:
- 异步处理
- 应用解耦
- 流量削峰
情景描述
以用户注册为例,系统在用户注册后会调用邮件服务功能发送注册信息邮件给客户,下面是各服务的调用时间
服务类型 | 服务耗时 |
---|---|
新增用户 | 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 |