在线教育(微服务)

源码网址:https://github.com/PAcee1/xcEduService,原型是腾讯课堂。

## 项目工程目录介绍

- xc-framework-common:公共类存放,比如exception处理类,intercept拦截器等
- xc-framework-model:存放实体
- xc-framework-parent:所有工程父工程,依赖管理
- xc-framework-utils:Utils类
- xc-govern-center:注册中心
- xc-govern-gateway:Zuul网关
- xc-service-api:Api接口,生成Swagger
- xc-service-base-filesystem:文件上传到FDFS
- xc-service-learning:学习中心,获取视频播放路径,添加学生课程等
- xc-service-manage-cms:CMS管理
- xc-service-manage-cms-client:CMS的RabbitMQ客户端,用来页面发布页面预览
- xc-service-manage-course:课程管理
- xc-service-manage-media:媒资管理
- xc-service-manage-media-processor:视频处理工程
- xc-service-manage-order:订单管理
- xc-service-search:ElasticSearch搜索
- xc-service-ucenter:用户中心
- xc-service-ucenter-auth:SpringSecurity认证授权
- xc-resources:存放配置文件,不在Maven管理中,只是一个文件夹

这里关注的是服务,主要有下面几个

(1)CMS管理(xc-service-manage-cms,xc-service-manage-cms-client):页面增删改查,页面预览,页面发布

前端请求cms执行页面发布。
cms执行静态化程序生成html文件。(xc-service-manage-cms)
cms将html文件存储到GridFS中。
cms向MQ发送页面发布消息。
MQ将页面发布消息通知给Cms Client。(xc-service-manage-cms-client)
Cms Client从GridFS中下载html文件。
Cms Client将html保存到所在服务器指定目录。

(2)课程管理(xc-service-manage-course ):课程增删改查,课程计划增删改查,课程营销信息,课程图片上传删除,课程发布,课程预览

课程发布时候,把相关信息加入Elasticsearch。

另外,通过注解@FeignClient,使用本地Java API的方式调用上面CMS管理的Restful接口

@FeignClient(value = XcServiceList.XC_SERVICE_MANAGE_CMS)
public interface CmsPageClient {

    // 根据id查询页面,Feign远程调用
    @GetMapping("/cms/page/get/{id}")
    CmsPage findCmsPageById(@PathVariable("id") String id);

    // 保存课程到CMSPage
    @PostMapping("/cms/page/save")
    CmsPageResult saveCmsPage(@RequestBody CmsPage cmsPage);

    // 一键发布课程
    @PostMapping("/cms/page/publishPageQuick")
    CmsPublishPageResult publishPageQuick(@RequestBody CmsPage cmsPage);
}

(3)课程搜索(xc-service-search): ES查询

     (3.1)根据 名字,培训计划,描述和一些条件过滤搜索课程。

     (3.2)根据课程id获得视频地址

 (4)媒资管理(xc-service-manage-media):

每个教学机构都可以在媒资系统管理自己的教学资源,包括:视频、教案等文件。目前媒资管理的主要管理对象是课程录播视频,包括:媒资文件的查询、视频上传、视频删除、视频处理等。

媒资查询:教学机构查询自己所拥有的媒体文件。

视频上传:将用户线下录制的教学视频上传到媒资系统。

视频处理:视频上传成功,系统自动对视频进行编码处理。

视频删除:如果该视频已不再使用,可以从媒资系统删除。

媒资与课程id关联后 ,同时通过logtash 将关联信息导入到ES。

 xc-service-manage-media  视频处理发送方,xc-service-manage-media-processor 视频处理接收方 (avi转m3u8,mp4)

视频处理进程的任务是接收视频处理消息进行视频处理,业务流程如下:

1. 监听MQ,接收视频处理消息。
2. 进行视频处理。
3. 向数据库写入视频处理结果

(5)学习中心(xc-service-learning):视频播放,课程计划查询,动态获取视频地址

根据课程id获得视频地址 ,实际调用的(3.2)的接口

@FeignClient(value = XcServiceList.XC_SERVICE_SEARCH,path = "/search/course") 
public interface CourseSearchClient {
@GetMapping("/getmedia/{teachplanId}")
public TeachplanMediaPub getmedia(@PathVariable("teachplanId") String teachplanId);
}

(6)认证中心(xc-service-ucenter-auth):登录,登出,查询JWT用户信息,权限校验管理,

执行流程:

用户登录,请求认证服务 认证服务认证通过,生成jwt令牌,将jwt令牌及相关信息写入Redis,并且将身份令牌写入cookie 用户访问资源页面,带着cookie到网关 网关从cookie获取token,并查询Redis校验token,如果token不存在则拒绝访问,否则放行 。

用户退出,请求认证服务,清除redis中的token,并且删除cookie中的token 使用redis存储用户的身份令牌有以下作用:

实现用户退出注销功能,服务端清除令牌后,即使客户端请求携带token也是无效的。 由于jwt令牌过长,不宜存储在cookie中,所以将jwt令牌存储在redis,由客户端请求服务端获取并在客户端存 储。

(7)Zuul网关路由(xc-govern-gateway):

LoginFilter extends ZuulFilter{

   public Object run() throws ZuulException {        

  // 从Cookie取jti令牌
  
    // 不存在拒绝访问
  

    // 从Redis取过期时间
  
    // 不存在拒绝访问   

  // 从请求头取令牌

 // 验证出错拒绝访问   

   }

}

(8)订单服务(xc-service-manage-order):

支付成功后自动添加选课(演示基于MQ的分布式事务)

定时任务处理选课任务,发送消息前当前任务表添加记录,历史表添加一个操作记录。

收到消息后当前任务表删除任务记录,同时历史表添加一个操作记录

综上所述,这里涉及的服务间通信方式是MQ或FeignClient。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值