主要是原因有三点:应用异步、应用解耦、流量削峰。
1.应用异步:就订单系统而言,下单成功后,需要给用户发送一个下单成功的短信,一般的做法是用户下单后直接调用接口给用户发短信,但是如果调用接口或者是调用接口的(短信)运营商出现问题,就会造成下单过程阻塞,导致整个下单流程不成功,(/用户收不到响应/),当使用RabbitMQ,引入消息队列后,把发送短信这种不是必须的业务逻辑进行异步处理,就能有效避免下单过程中的阻塞问题,(/用户下单后很快就会收到响应/)。
2.应用解耦:一般在用户下单成功后,订单系统需要通知库存系统,传统的做法就是订单系统调用库存系统的接口来减少库存。但是这种做法有两个缺点,一是当库存系统出现故障时,订单就失败;二是订单系统和库存系统高度耦合。但是引入RabbitMQ后,对订单系统来说,用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功;对库存系统来说,在消息队列上订阅下单的消息,获取下单消息,进行库存操作,就算库存系统出现问题,消息队列也能保证消息的可靠投递,不会导致消息的丢失。
3.流量削峰:这边流量削峰功能主要应用在秒杀活动中。在秒杀活动中,一般会因为流量过大,导致应用挂掉,为了解决这个问题,在应用前端(/库存系统前端/)加入消息队列,在这个订单系统,服务器收到用户的请求后,首先写入消息队列,超过消息队列长度的用户请求,则直接抛弃掉或者跳转到错误页面,这样可以控制活动人数;接下来秒杀业务处理系统(/库存系统/)根据消息队列中的请求信息,可以按照自己的最大处理能力获取订单,能有效避免短时间内高流量涌入压垮应用的问题。
参考文档:
- https://mp.weixin.qq.com/s/3GMs3ae7ffDFgia9VSDMEg
- https://m.toutiaocdn.com/item/6512994463378309645/?app=news_article×tamp=1585094884&req_id=202003250808040101290490340B58BA41&group_id=6512994463378309645&wxshare_count=1&tt_from=weixin&utm_source=weixin&utm_medium=toutiao_android&utm_campaign=client_share
来源:oschina
链接:https://my.oschina.net/u/4480939/blog/3210624
