开发者学堂课程【RocketMQ 知识精讲与项目实战(第二阶段):下单功能时序图分析】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/703/detail/12409
下单功能时序图分析
首先分析一下时序图(如上图),这个时序图上面显示整个下单业务所有的流程,用户请求订单系统,这个外部系统去完成下单的请求。
现在订单系统接收到用户请求后去调用这个订单服务,去完成一个订单的保存。
调用下单服务怎么调用的呢?通过远程 RPC 方式去调用,然后订单服务接收到订单请求之后,现在先去完成校验订单操作,再生成预订单,这个预订单对于用户来说是不可见的,再去完成扣减库存操作,把订单当中商品库存进行一个扣减。扣减库存是要去通过远程 RPC 方式去调用这个库存服务去扣减这个库存,扣减成功之后再去调用优惠券服务去完成扣减优惠券的服务,扣减优惠券之后再去调用用户服务去完成扣减余额的操作,当这个扣减余额完成之后在第六步可以进行订单的确认,这个订单确认是在第二步生成预订单时候把这个不可见的订单改为可见的,让用户可见。
如果这一步确认成功之后,其实当前的下单业务就完成了,再给用户做一个享用。
但是如果在这个地方执行失败了,在前面扣减的库存,所扣减的优惠券,所扣减的余额都要回退到原始的状态。所以当如果发生异常,就给 MQ 发送一条消息。
当前的库存服务、优惠券服务还有用户服务以及订单服务,它们都会去同时去监听 MQ 当中的消息。如果发现有得到订单确认消息失败之后,它们分别对库存进行回退,对优惠券进行回退,对余额进行回退以及把这个订单进行取消,这是整个下单业务所有的流程。
现在正式进入开发,在开发的时候分成两条主线去做。首先先把整个成功的流程开发完,然后再去处理异常情况,再通过消息的低智能进行一个失败的补偿体制,这是整体一个编写代码的流程。