学成在线-第19天-讲义-分布式事务1订单与选课需求分析1.1订单支付流程学成在线的课程分为免费和收费两种。对于收费课程,用户需提交订单并完成支付方可在线学习。提交订单及支付流程如下:1、用户提交订单需要先登录系统2、提交订单,订单信息保存到订单数据库3、订单支付,调用微信支付接口完成支付4、完成支付,微信支付系统通知学成在线支付结果5、学成在线接收到支付结果通知,更新支付结果提交订单流程:1、用户进入课程详情页面2、点击“立即购买”,打开订单确认信息北京市昌平区建材城西路金燕龙办公楼一层电话:400-618-90903、点击“确认无误,提交订单”订单提交成功,向订单数据库的xc_orders订单表保存一条记录,向xc_orders_detail订单明细表保存一条或多条记录,向订单支付表插入一条记录。4、订单提交成功自动进入订单支付页面5、点击“微信支付”打开二维码北京市昌平区建材城西路金燕龙办公楼一层电话:400-618-90906、用手机扫码支付,支付完成,点击“完成支付”支付完成,收到微信支付系统的支付完成通知或请求微信查询支付已完成,更新学成在线订单支付表中的支付状态字段。1.2自动选课需求支付成功即完成订单,订单完成之后系统需自动添加选课。下图是微信支付、学成在线订单服务、学成在线学习服务交互图:1、用户支付完成,微信支付系统会主动通知学成在线支付结果,学成在线也可主动请求微信支付查询订单的支付结果。最终得到支付结果后将订单支付结果保存到订单数据库中。2、订单支付完成系统自动向选课表添加学生选课记录。3、选课记录添加完成学习即可在线开始学习。2分布式事务北京市昌平区建材城西路金燕龙办公楼一层电话:400-618-90902分布式事务2.1问题描述根据上边的自动选课的需求,分析如下:用户支付完成会将支付状态及订单状态保存在订单数据库中,由订单服务去维护订单数据库。而学生选课信息在学习中心数据库,由学习服务去维护学习中心数据库的信息。下图是系统结构图:如何实现两个分布式服务(订单服务、学习服务)共同完成一件事即订单支付成功自动添加学生选课的需求,这里的关键是如何保证两个分布式服务的事务的一致性。尝试解决上边的需求,在订单服务中远程调用选课接口,伪代码如下:上边的逻辑说明:1、更新支付表状态为本地数据库操作。2、远程调用选课接口为网络远程调用请求。3、为保存事务上边两步操作由spring控制事务,当遇到Exception异常则回滚本地数据库操作。问题如下:1、如果更新...