论述一下你项目的主题流程:
首先用户在前端发起注册或登录请求,初次注册登录成功后选择兴趣爱好,在选择之后会有课程进行推荐,用户再查看视频课程介绍决定是否购买课程,否的话先加入购物车,是的话进行下单操作,然后再判断是否有可以使用的优惠券,有,则领取优惠券再进行支付,若没有则直接走支付功能,然后会将用户购买的课程加入课程表,结束;
项目中有多少个微服务?
项目中总共有13个微服务,分别是共同调用微服务、api微服务、网关微服务、权限微服务、点赞微服务、用户微服务、短信微服务、优惠微服务、健身课程微服务、支付微服务、用户观看微服务(其中有评论回复功能)、数据微服务、搜索微服务等;我负责的模块主要是视频管理微服务、课程学习微服务优惠券模块,搜索模块和用户模块;
视频管理微服务的功能,其中有几张表、分别有什么字段?
课程微服务主要是用来对视频的上传,分类的功能,为用户提供视频教程服务;
在管理端负责视频的上传将其上传到对应的分类中,对于上传的时候,我们采用断点续传的方式,保证视频可以正常上传,采用IO流来实现视频的分块上传、下载等;解决因为网络问题而导致的视频的反复重新上传,对于视频的安全性方面,我们采用了nginx中存入一个lua脚本代码,来反向代理我们视频文件的url地址,防止我们的视频呗别人恶意爬取;
视频课程微服务中有三张表:课程分类表、草稿课程表、课程内容表;
课程分类表中的字段有:课程id,分类名称、课程分类的状态(正常、禁用)、创建时间、更新时间、创建人、更新人;
草稿课程是用来存放上传视频的草稿的,分别有课程草稿id,课程名称、课程的售卖方式、课程的价格、课程状态(待上架、已上架、下架)、课程购买有效期开始时间、课程购买有效期、课程的评分、课程的时长、创建时间、更新时间、创建人、更新人;
课程内容:课程内容id,课程的介绍、适合人群、创建时间、创建人、更新时间、更新人。
优惠券模块:
营销模块主要有五张表:优惠券的规则信息表、优惠券的作用范围表、兑换码表、促销活动表、用户领券的记录表;
优惠券的规则信息表有:优惠券id,优惠券的名称、优惠券的名称、优惠券的类型、折扣类型、是否限定作用的范围、折扣力度(几折或者满多少减多少)、使用门槛、最高优惠金额、获取的方式(手动直接领取,兑换码兑换)、开始发放时间、结束发放时间、优惠券有效天数、优惠券有效期的开始时间,总数量、已发放的数量,已使用的数量、没人限领的数量、创建时间、更新时间、创建人、更新人;
优惠券的作用范围:优惠券的作用范围id、范围限定类型、优惠券的id、优惠券作用范围的业务id;
促销活动促销活动id、活动名称、促销活动类型、活动开始时间、活动结束时间、创建时间,更新时间,创建人,更新人;
兑换码表:兑换码id、兑换码、兑换码的状态(待兑换,已兑换,兑换活动已结束)、兑换人创建时间、兑换码过期时间、更新时间;
用户领取优惠券的记录:用户券id,优惠券模板id,优惠券有效期开始时间、优惠券有效期结束时间、优惠券使用时间、优惠券状态、创建时间、更新时间;
优惠券功能,主要就是并发量比较高,所以说我们在接受到请求后是先放入到MQ中,实现了流量削峰,排队处理,然后需要保住优惠券的库存不出现超领的情况,我们使用的是乐观锁实现的,其实也就是在更新时加一个条件,需要当前已发放的优惠券数量小于优惠券总数量,就可以实现不超卖。
搜索模块:
用户在APP端点击搜索框,输入查询内容,点击搜索的时候,请求发送到nginx,nginx反向代理到网关,网关找视频课程微服务,视频课程微服务使用了ES实现关键字搜索功能,先将用户输入的文本根据分词器进行分词,然后根据课程的标题或关键字做为条件进行查询,寻找匹配的词条,之后把响应结果返回到前端展示。
用户在APP端点击搜索框并输入查询内容,然后点击搜索。
APP会把搜索请求发送到Nginx服务器,Nginx服务器会根据配置的反向代理规则把请求转发给网关。
网关接收到请求后会根据请求中的URL路径和HTTP方法,把请求转发给微服务。
视频课程微服务接收到请求后,会使用ElasticSearch进行关键字搜索,并获取匹配的结果。
视频课程微服务会把搜索结果返回给网关。
网关把响应结果返回给Nginx服务器。
Nginx服务器将响应结果返回给用户,页面展示搜索结果。