我的项目-问题总结

项目遇到的问题

惠杰教育

  1. 文件存储问题,第3方技术的使用不熟练?也有想过大文件
  2. 没有使用网关时,使用nginx做的反向代理,但是nginx对上传文件大小有限制,如果超过nginx大小,会出现413(请求体过大)错误?在nginx配置客户端大小。client_max_body_size 300M
  3. vue-cli的组件化前端开发模式?熟悉vue-cli
  4. mp生成id值是19位,JavaScript处理数字类型值时候,只会处理到16位。所以在id中使用mp中IDType.ID_Worker_Str类型19位雪花算法字符型。
  5. 服务间远程调用的问题?一开始使用nginx做反向代理,每开启一个服务就在配置文件中添加对应的服务名和端口
  6. 上传课程的逻辑?涉及的表有很多,发布课程涉及:课程表、章节小节表、课程描述表、视频表。一个页面表单过大,而且业务不完整。

在线说

  1. 评论表的设计?多对多的关系,parentId解决,一张表解决问题
  2. redis缓存评论信息怎样存储?树形结构
  3. mybatis-plus的接入问题?SqlSessionFactory对象
  4. restful的不经过controller传参?手写js

思考这些问题是怎么解决的,对自己的启发,以后遇见类似问题应该怎样去解决和思考


huijie都有那些模块

(9个业务服务,4个系统服务)权限管理模块、banner管理、课程模块、订单模块、短信服务、文件对象存储模块、视频模块、统计模块、会员模块、其他组件:系统授权安全管理模块、网关模块、工具类、其他配置模块(redis、swagger、统一返回结果、统一异常处理等)

MP的分页

  1. 注入一个分页插件PaginationInterceptor对象。
  2. 然后在对应的service中创建对应泛型的Page对象,并传入分页参数。
  3. 直接调用service的page()方法,page()需要传入一个Page对象和查询条件
  4. 将查询结果发在这个Page对象中,可以通过Page对象获得结果后返回给controller。

EasyExcel使用

阿里巴巴提供的对excel的简单操作,一行一行的加载excel的表数据,效率较高。

首先,引入easyExcel的依赖,easyExcel是对poi的封装,所以也要导入poi的版本,而且要对应起来。创建实体类,实体类属性对应Excel表的表头。并用@ExcelProperty(index=1)注解修饰,index表示列序。

业务流程:获取前端上传的Excel文件,读取Excel文件内容,写入数据库。

  1. 创建实体类
  2. 创建监听器继承AnalysisEventListenter<实体类泛型>,重写方法:读表头、按行读、读完后等。
  3. 调用Excel.read(文件路径,实体类,监听器对象).sheet(“sheetName”).doread();//读excel到java集合中

  • EasyExcel.write(文件路径,实体类.class).sheet(“sheetName”).dowirte(实体类集合);//把集合中的数据写到excel中

上传课程的流程

上传课程设计数据表过多,逻辑复杂,分步骤上传可以解决表单过大问题、逻辑根据清晰、业务也更加完善。

  • info.vue:添加课程基本信息(课程分类、封面、价格、课时数、简介)。点击保存下一步,生成数据到数据库,此时状态为未发布。
  • chapter.vue:编辑课程大纲。添加课程对应章节小节信息上传视频信息,并且提供对章节小节信息的编辑删除等功能。按钮“返回上一步”info.vue继续编辑课程基本信息,在info.vue中数据回显。按钮“确定”路由跳转publish.vue。
  • publish.vue:按钮“返回上一步”chapter.vue编辑章节小节信息。按钮“确定发布”课程信息为已发布状态。跳转list.vue可查看新添加的课程。
  • (每次上一步、下一步均会访问数据库,根据路由跳转参数作数据回显,路由跳转使用的是this.$router.push({path:’/course/publish/’+this.courseId}))

上传课程细节-OSS对象存储

OOS(海量、安全、低成本、高可用的云存储服务,支持restfulAPI)。

步骤:

  1. 用支付宝注册一个阿里云账号并做一个实名认证,开通oos对象存储功能
  2. 创建bucket存储空间(包含唯一的名称、区域、存储类型等),与url有关
  3. 通过Bucket管理,安全信息管理,用手机号验证,获得id和密钥
  4. 根据id、密钥、bucket地域节点创建一个OSSClientBuilder对象(包含上传、下载等功能)
  5. 使用OSSClientBuilder对象去上传文件。MultiparFile。在API文档使用文件流的方式进行上传

上传课程细节-视频点播

  1. 开通阿里云视频点播服务
  2. 设置视频参数清晰度、帧率、码率、编码格式、加密设置等
  3. 阿里云提供了两种方式去上传视频:1. API :阿里云提供固定的地址,只需要调用这个固定地址,向地址传递参数就可以实现功能。2. SDK :sdk是对api的封装,更方便使用,调用提供的类或接口实现视频功能
  4. 因为上传视频会生成一个视频唯一的id和url。因为上传视频可以进行加密,加码之后,使用加密之后的url是不能进行播放的,所以在数据库中不存地址,而存储视频id,根据id可以获取到视频地址和播放凭证。video_source_id字段。(根据视频id获取视频凭证和播放地址在文档中给出代码例子)

思考问题:视频过大怎么整?视频分片可以通过创建一条权限策略并分配给角色,该权限策略里面包括上传文件、分片上传的相关权限,包括断点续传、分片上传

短信服务

  1. 开通阿里元的短信服务
  2. 设置短信的签名管理和模板管理,并且进行申请模板
  3. 发送成功验证码后,存储到redis中,并设置有效时间为1分钟

微信登陆

  1. 在微信中进行注册激活、完善开发者资料、开发者资质认证、创建网站应用,提交审核。获取openId、open密钥【openAppId:应用的唯一标识。】
  2. 根据自己的业务,给出重定向的url地址,也就是使用微信登陆成功后的回调url。并进行url编码。
  3. 使用openId、open密钥、重定向url、拼接微信开放平台授权的baseUrl,做好细节处理(转码、过期时间、安全(可以加uuid)等处理)后生成重定向url。

spring cloud Gateway?

  • Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。网关作为流量的,在微服务系统中有着非常作用,网关常见的功能有路由转发、权限校验、限流控制等作用。
  • 使佣了一个RouteLocatorBuilder的bean去创建路由,除了创建路由RouteLocatorBuilder可以让你添加各种predicates和filters, predicates断言的意思,顾名思义就是根据具体的请求的规则,邮体的route去处理,filters是各种过滤器, 来对请求做各种判断和修改。

支付流程

  1. 在课程列表,点击课程,跳转课程详情页
  2. 根据课程状态显示课程信息。立即观看:免费、已支付。立即购买:非免费课程,或者没有购买(判断:根据用户id和课程id,查询订单状态值1表示已支付)。
  3. 点击立即购买,会生成订单详情列表
  4. 确认支付,会弹出根据订单信息(价格)微信支付二维码
  5. 在二维码界面创建了定时器3秒查询订单状态,未支付等待;
  6. 已支付则清除定时器,更新订单状态和课程状态,添加一条订单记录

单点登录

  • session广播机制:其实就是session复制。缺点:当应用模块较多时,此方式比较复杂。而且复制指的是同一数据,也比较占用空间。session默认30分钟失效。
  • cookie+redis:cookie是浏览器端技术,每次发送数据时都会进行发送。过程:1.在任何一个模块进行登陆后,把数据放到redis中(key:生成的随机的值(一般可能按照ip、或者用户id等),value:用户数据),cookie:存redis中生成的key。2.访问其他模块时,发送请求带着cookie值,用cookie值到redis中进行查询,如果查询到数据说明用户已登陆。redis也可以设置值过多长时间过期。
  • 使用token(自包含令牌):token是按照一定规则生成的字符串,字符串中包含了用户信息。过程:1.在任何一个模块进行登陆,登陆后按照一定规则生成包含用户信息的字符串,把字符串进行返回给前端(地址栏、或者cookie)2.再访问其他模块时,都带着这个字符串,对应模块后端获取到字符串,通过这个字符串可以获取到用户信息,那么就说明登陆成功。

jwt令牌:一种官方通用规则,规定了生成token字符串的规则。
分为3部分:

  • 第一部分:jwt头信息
  • 第二部分:有效载荷,包含主体信息(用户信息)
  • 第三部分:签名哈希,即防伪标志

Nacos使用 (1.1.4)

  1. 安装Nacos服务器,并启动
  2. 引入nacos客户端的pom依赖
  3. 配置nacos服务的配置信息。例如:服务地址等端口号8848
  4. 在对应模块的启动类上启动nacos注册@EnableDiscoveryClient

服务调用

(消费者->生产者:
1.删小节->删视频,edu->vod;
2.删课程->删除章节(多个)->删小节(多个)->删视频(多个)阿里云提供了批量删;)

  1. 引入feign的starter,openfeign
  2. 在nacos中注册调用模块,被调用模块。
  3. 在对应的模块(调用端)启动类中添加@EableFeignClients
  4. 在调用端创建接口(不需要实现类,只用来远程调),并用@FeignClient(“调用模块名”)指定调用的模块名,调用的方法上,标明方法路径(与被调用端相同)
  5. 在调用端的接口中注入这个接口,并(远程)调用接口

SpringCloud远程调用的过程

Feign->Hystrix->Roabbon->HttpClient流程

  1. 接口化请求调用。
  2. Feign组件:作用就是按照指定的模块名找到服务,并按指定路径执行指定方法。
  3. Hystrix:熔断器,解决被调用端宕机问题.远程调用出现问题可切断连接。
  4. Roabbon:负载均衡,挑选合适的服务。
  5. HttpClient:最终调用。

项目中redis使用

  1. 引入依赖,并对redis进行配置
  2. 在对应的接口方法上加@Cacheable(value="",key=“selectIndexList”)注解,表示该方法的返回结果是可以缓存的,下次,使用相同参数调用方法时,会返回缓存中的值,不会直接执行方法。在redis中key实际为key::selectIndexList,value为实际返回值。

(我在项目中遇见的问题总结,解决方式可能不是最优,说法也有些不准确,希望大佬指点交流)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值