学易思在线学习平台

我要开发同款
wangjunzheng2023年01月31日
167阅读
所属分类SpringCloud

作品详情

该项目是基于SAAS商业模式开发的在线教育平台,最终交付对象为某教育科技股份有限公司。该公司旗下附属的多个教育机构需要将本机构内的课程、教师等相关信息上传至本平台。上传完毕后的课程经过该教育科技股份有限公司审核通过后,可以在本平台对外上架该课程。最后由消费者对上架的课程进行搜索、购买、学习、讨论。

项目整体采用SpringCloud+Alibaba的组件搭建,用RBAC模型+Gateway+SpringSecurity+JWT+OAuth2进行权限控制,Sentinel进行流量治理,Seata解决分布式事务,Redis作为缓存数据库和分布式锁实现方案,Dubbo进行远程调用与熔断降级,RabbitMQ作为消息中间件,使用ElasticSearch实现海量课程数据快速检索,使用阿里云和七牛云的云端存储平台保存项目日志及用户上传的文件,通过docker+k8s进行容器化部署。

本项目共分为如下功能模块:权限控制模块、数据字典维护模块、教育机构信息管理模块、课程相关的基础信息管理模块、课程审核模块、作业模块、评论模块、用户信息模块、订单模块、支付模块、日志模块、OSS对象存储模块。

其中本人负责除了支付模块以外所有模块的实现方案设计工作(包括技术选型、数据库表设计、实现方案),以及这些模块中部分复杂业务代码的编写。

其中涉及到的最复杂的难点接口为课程相关的基础信息管理模块中的课程上架接口。该接口业务场景为:当某教育机构的课程上传完毕,通过该教育科技股份有限公司的审核后,通过该接口将课程信息发布到该平台上,从而使该课程信息可以被消费者搜索到并进行后续操作。业务要求为:上架的操作必须最终成功。且用户点击前端的按钮后即时响应。

最终我给出的实现方案核心是围绕RabbitMQ设计的:本身mq的异步通信就可以提升响应速度,我们只需要确保消息一定发送成功、一定不丢失、一定被消费到、避免重复消费即可满足该接口所有的业务需求。具体设计方案为:定时任务扫描Mysql数据,找到发送失败的消息,重新发送。开启消费失败重试机制增加失败容错;惰性队列确保消息不丢失;标记法避免消息重复消费;死信队列作为最终保险,存储重试失败次数过多的消息,将该课程的上架操作转交给人工客服处理。
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论