RabbitMQ学习二MQ解决了什么问题

笔记二RabbitMQ解决了什么问题
一、同步变异步
情景:
电商项目中常有的一个业务场景。用户在线下单之后调用订单服务,订单服务会依次调用短信服务进行短信通知、邮件服务进行邮件通知、下单消息通知完成上述通知之后向用户返回请求结果。如下图所示:
RabbitMQ学习二MQ解决了什么问题_第1张图片
那么由于整个业务流程是同步进行,因此会暴露两个缺点:
1、同步总耗时长 2、订单服务与其他服务是强耦合
将同步操作更改为异步操作
(1)异步–线程池如下图所示
RabbitMQ学习二MQ解决了什么问题_第2张图片
用户下单后订单服务在线程池中创建并启动线程任务,每个线程相互不影响每个线程也不会像同步那样需要等待,各自分开独立执行互不影响。这样也能达到异步的操作效果,但是存在以下缺点:
1、自己实现线程池 2、强耦合(线程池实现的代码是需要整合到订单服务中,进而导致订单服务和其他服务并没有解耦)
(2)异步–消息队列MQ如下图
RabbitMQ学习二MQ解决了什么问题_第3张图片
用户调用订单服务之后,订单服务向MQ发送请求,MQ接收请求后返回结果。至此订单服务和用户之间的请求闭环完成。MQ会去执行后续的步骤,短信服务、邮件服务、消息通知服务等一系列动作。后续的短信服务、邮件服务、消息服务只和MQ发生交集,降低了和订单服务之间的耦合性,达到了解耦的作用也降低了请求时间的消耗。
二、解耦
三、流量削峰
情景:
电商中常用的秒杀业务,大批量的用户向服务器进行请求,如果处理不恰当或者服务器抗压能力差那么会导致服务器处理不及时进而引发服务瘫痪的故障。
故此使用MQ进行削峰的处理如下图所示
RabbitMQ学习二MQ解决了什么问题_第4张图片
我们将大流量的请求交给消息队列去处理,而消息队列只是接收消息而不处理消息最终的业务实现处理还是交给秒杀服务去完成。所以大量用户请求并没有之间将压力交给秒杀服务而是交给了消息队列。
我可以给消息队列设置限定值当达到限定值将后续操作交由其他服务处理等,那么进而可在消息队列中可以做更多的事情,至于做什么事情小编也不知道噻!
这样的一个削峰处理有效的保护了秒杀服务,降低了服务挂掉的风险。
总结:
使用MQ的三大作用:
1、同步变异步
2、流量削峰
3、解耦降低服务间的耦合性
要不要使用MQ,需不需要使用MQ依据项目的需要做选择。

你可能感兴趣的:(RabbitMQ)