添加课表
课表购买之前只是单纯的课程,平台讲师发布,用户只能看到课程相关的信息。只有用户在付款购买后才会后加入用户课表,才能进行观看学习。(免费课程,点击报名后自动加入课表)
课表添加,涉及到交易和学习两个为微服务,由交易服务,发起远程调用学习服务,完成课程的添加。这里涉及到微服务间的互相调用,常用收无外乎就是基于Feign的同步调用和Rabbit MQ的异步通讯。应为调用的是一个新增相关的业务接口,不关注返回结果,所以MQ会更适合此场景。接下来,就把交易模块看做消息发布者,学习模块看做消息的消费者,以MQ的消息模型作为一个主体开发。
交易服务流程:
1.完成订单操作;
2.向mq投递支付成功的消息;
3.响应结果。
学习服务流程:
1.监听mq,一旦发现交易支付成功的消息,就开始消费消息;
2.添加课表。
在添加课表功能中,上来考虑地首先是封装课表对象(按照数据库表补齐数据),进行添加操作。但是根据mq消息传递的dto参数来看,这儿由涉及到课程表,所以需要发起一个课程服务远程的调用。(远程调用语句不要出现在循环中,影响性能) 因此,在添加之前得远程调用课程服务进行查询。 数据准被好后,再将完整的课表数据保存到数据库。
查询课表
课表查询的具体体现就是,用户购买完课程后,进入学习中心->我的课程,在这一栏就会展示用户购买的所有课程(包含免费课程)。
在查询的时候要注意接口文档中四要素(request url、request method、request parameters、response result)可以根据求参数决定DTO,响应结果数据决定服务是否会跨库跨服务。
在这儿,根据响应结果可以判断,需要从课程服务中查询课程表的信息。因为是查询,所以用Feign的同步调用。
具体业务逻辑:
①:查询课表信息;
②:用一个Set结合来承载课表信息关联的课程信息,并转化为一个Map结合(方便后续获取课程信息);
③:遍历课程,获取课程信息
④:合并两部分记过,封装最终需要的VO返回。
最近学习
总流程:
学习服务-->课程服务(获取课程、以及章节相关信息) -->封装VO(出参)
具体流程:
①:根据业务条件,查询最近学习的课程;注意用户id这个隐式条件
②:获取课程id,根据课程id调用课程微服务,获取课程信息(远程调用)
③:从课程表中获取到小节id,调用课程微服务的章节接口;
④:封装结果并返回;