2-1 说一下生成课表的业务流程
在我的项目中,这个业务涉及到了三个微服务,分别是交易微服务和课表微服务,课程微服务。
首先,生成课表需要购买课程,购买课程是交易微服务的业务功能,课程又分为免费的和收费的。
其中,收费的需要生成订单,支付,清空购物车,然后生成课表,免费的则是生成订单,然后生成课表。
生成课表则是在课表微服务,生成课表的方式有很多,我在项目中使用的是消息中间键MQ,在交易微服务业务功能返回结果的前一步,向MQ投递消息,
在课表微服务消费消息,向课程表插入数据。
最后在插入课表数据时,由于课表数据需要用到课程的一些信息,于是我使用了feign远程调用了课程微服务,为了提高性能,我选择了批量新增,而不是循环插入数据。
这就是我在项目中生成课表的业务流程。
2-2 说一下查询课表的业务流程
在我的项目中,查询课表涉及到了两个微服务,课表微服务和课程微服务。
首先,当浏览器查询的请求发过来后,从课程表中查询,设置分页条件(分页需要的参数),设置业务条件(登录用户Id和课程id,并且以最后一次学习时间倒序排列),执行查询
由于返回结果不是课表的实体类而是一个vo,vo里包含课程的一些信息,于是我使用feign远程调用课程微服务,为了提高性能,我将feign远程调用写在循环之外,为了方便使用课程的信息,我将远程调用的结果(list)通过stream流转成了map(键是课程的id,值是课程对象)。
最后组装结果,发返回数据。
这就是我在项目中查询课表的业务流程。
2-3 说一下查询最近学习章节的业务流程
在我的项目中,查询最近学习章节使用了两个微服务,三张表,分别是课程微服务的课程表和章节目录表,以及课表微服务的课表。
首先,当浏览器查询的请求发过来后,从课程表中查询,设置业务条件(登录用户Id,并且以最后一次学习时间倒序排列),执行查询,虽然最近学习章节只会查询一个结果,但由于返回结果vo中需要该用户课表的数量,为了提高性能,少从数据库查一次数量,所以这里查询该用户的所有课,取第一个。
然后调用而课程表对应的feign接口和章节目录表对应的feign接口,补充数据。
最后返回结果。
这就是我在项目中查询最近学习章节的业务流程。