谷粒学苑-课程管理&发布前后端、阿里云点播、视频上传前后端、微服务基本组件

学习记录

课程管理模块

一.分析

前端

大概流程
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

课程列表

在这里插入图片描述

后端

表关系
在这里插入图片描述

edu_source //课程基本信息

edu-source_description //课程简介信息(和上面那个表可以合成一张表,分表更好)

edu_chapter //课程章节表

edu_video //存储章节里的小节(视频阿里点播)

edu_teacher //讲师表

edu_subject //分类表

注:讲师与课程也可以是一对多,以后再说把。
在这里插入图片描述

二.课程基本信息添加

接口

@Api(tags = "课程详情")
@RestController
@RequestMapping("/edu/course")
public class CourseController {

    @Autowired
    private CourseService courseService;

    @PostMapping("/saveCourseInfo")
    @ApiOperation("添加课程信息")
    public Result saveCourseInfo(@ApiParam(name = "courseInfoVo", value = "课程基本信息", required = true) @RequestBody CourseInfoVo courseInfoVo) {
        String courseId = courseService.saveCourseInfo(courseInfoVo);
        return Result.ok().data("courseId", courseId);
    }
}

实现方法

serviceImpl

    @Override
    @Transactional(rollbackFor = {RuntimeException.class,Exception.class})
    public String saveCourseInfo(CourseInfoVo courseInfoVo) {
        //1、向课程表中添加课程信息
        Course course = new Course();
        BeanUtils.copyProperties(courseInfoVo,course);
        course.setIsDeleted(0);
        int insert = this.baseMapper.insert(course);
        if (insert <= 0){
            //添加失败
            throw new GuliException(ResultCodeEnum.FAIL);
        }
        String courseId = course.getId();
        //2、向课程简介表中添加数据   edu_course_description
        CourseDescription description = new CourseDescription();
        description.setCourseId(courseId)
                .setId(courseId)
                .setDescription(courseInfoVo.getDescription());

        boolean save = courseDescriptionService.save(description);
        if (!save){
            throw new GuliException(ResultCodeEnum.FAIL);
        }
        return courseId;
    }

@Data
@Accessors(chain = true)
@ApiModel(value = "课程基本信息", description = "编辑课程基本信息的表单对象")
public class CourseInfoVo implements Serializable {

	private static final long serialVersionUID = 1L;

	@ApiModelProperty(value = "课程ID")
	private String id;

	@ApiModelProperty(value = "课程讲师ID")
	private String teacherId;

	@ApiModelProperty(value = "课程专业ID")
	private String subjectId;

	@ApiModelProperty(value = "课程专业ID")
	private String subjectParentId;

	@ApiModelProperty(value = "课程标题")
	private String title;

	@ApiModelProperty(value = "课程销售价格,设置为0则可免费观看")
	private BigDecimal price;

	@ApiModelProperty(value = "总课时")
	private Integer lessonNum;

	@ApiModelProperty(value = "销售数量")
	private Long buyCount;

	@ApiModelProperty(value = "浏览数量")
	private Long viewCount;

	@ApiModelProperty(value = "课程封面图片路径")
	private String cover;

	@ApiModelProperty(value = "课程简介")
	private String description;

	@ApiModelProperty(value = "课程专业信息")
	private List<SubjectNestedVo> subjectList;

	@ApiModelProperty(value = "讲师信息")
	private Teacher teacher;

	@ApiModelProperty(value = "层级选择器数据")
	private List<String> cascade;

	@ApiModelProperty(value = "层级选择器数据")
	private String videoSourceId;
}

三.课程基本信息添加

四.课程章节大纲列表

五.课程章节添加修改删除

六.课程小节添加修改删除

七.课程信息确认

八.课程列表显示


在这里插入图片描述

九.课程删除

十.课程信息、大纲编辑


阿里云点播

视频点播概述

视频点播(ApsaraVideo for VoD)是集音视频采集、编辑、上传、自动化转码处理、媒体资源管理、分发加速于一体的一站式音视频点播解决方案。

服务端SDK

调用阿里云提供类和接口里的方法实现功能

服务端:后端

客户端:浏览器

httpclient不需要浏览器就能发请求调用api

上传SDK

文件上传测试

01-视频点播微服务的创建

02-前端整合视频上传

03-删除云端视频

04-视频文件回显

添加小节时上传视频

微服务组件

SpringCloud相关概念介绍

什么是Spring Cloud

Spring Cloud是一系列框架的集合。它利用Spring Boot的开发便利性简化了分布式系统基础设施的开发,如服务发现、服务注册、配置中心、消息总线、负载均衡、 熔断器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过SpringBoot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包

Spring Cloud和Spring Boot是什么关系

Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的开发工具;Spring Boot专注于快速、方便集成的单个微服务个体,Spring Cloud关注全局的服务治理框架; Spring Boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,Spring Cloud很大的一部分是基于Spring Boot来实现,必须基于Spring Boot开发。可以单独使用Spring Boot开发项目,但是Spring Cloud离不开 Spring Boot。

Spring Cloud相关基础服务组件

服务发现——Netflix Eureka (Nacos)

服务调用——Netflix Feign

熔断器——Netflix Hystrix

服务网关——Spring Cloud GateWay

分布式配置——Spring Cloud Config (Nacos)

消息总线 —— Spring Cloud Bus (Nacos)

服务发现-搭建Nacos服务

结构图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DrpthUna-1661002567792)(谷粒学苑.assets/image-20220713061820572.png)]

  • Nacos 是阿里巴巴推出来的一个新开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施

  • 常见的注册中心:

    Eureka(原生,2.0遇到性能瓶颈,停止维护)

    Zookeeper(支持,专业的独立产品。例如:dubbo)

    Consul(原生,GO语言开发)

    Nacos

  • 四大功能:

    服务发现和服务健康监测

    动态配置服务

    动态DNS服务

    服务及其元数据管理

下载和安装

下载地址:https://github.com/alibaba/nacos/releases

下载版本:nacos-server-1.1.4.tar.gz或nacos-server-1.1.4.zip,解压任意目录即可

启动nacos服务
\- Linux/Unix/Mac

启动命令(standalone代表着单机模式运行,非集群模式)

启动命令:sh startup.sh -m standalone 

\- Windows

启动命令:cmd startup.cmd 或者双击startup.cmd运行文件。(修改cmd文件,standalone)

访问:http://localhost:8848/nacos

用户名密码:nacos/nacos
服务注册

以service_edu为例

  1. service模块配置pom
   <!--服务注册-->
   <dependency>
    <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
   </dependency>
  1. 配置application.properties
   # nacos服务地址
   spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
  1. 在客户端微服务启动类中添加注解 @EnableDiscoveryClient

  2. 启动已注册的微服务,可以在Nacos服务列表中看到被注册的微服务

服务调用-Feign

概念

  • Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。
  • Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。
  • Spring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。
  • Spring Cloud Feign是基于Netflix feign实现,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供这两者的强大功能外,还提供了一种声明式的Web服务客户端定义的方式。
  • Spring Cloud Feign帮助我们定义和实现依赖服务接口的定义。在Spring Cloud feign的实现下,只需要创建一个接口并用注解方式配置它,即可完成服务提供方的接口绑定,简化了在使用Spring Cloud Ribbon时自行封装服务调用客户端的开发量。

实现服务调用

1、需求

删除课时的同时删除云端视频

2、在service模块添加pom依赖
<!--服务调用-->
<dependency><groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
3.在调用端的启动类添加注解

@EnableFeignClients

4、创建包和接口

创建client包

@FeignClient注解用于指定从哪个服务中调用功能 ,名称与被调用的服务名保持一致。

@GetMapping注解用于对被调用的微服务进行地址映射。

@PathVariable注解一定要指定参数名称,否则出错

@Component注解防止,在其他位置注入CodClient时idea报错

package com.guli.edu.client;
@FeignClient("service-vod")
@Component
public interface VodClient {
    @DeleteMapping(value = "/eduvod/vod/video/{videoId}")
    public R removeVideo(@PathVariable("videoId") String videoId);
}
5、调用微服务

在调用端的VideoServiceImpl中调用client中的方法


完善删除课程业务

删除课程的同时删除云端视频

熔断器

Hystrix基本概念

Spring Cloud调用接口过程

Spring Cloud 在接口调用上,大致会经过如下几个组件配合:

Feign ----->Hystrix —>Ribbon —>Http Client(apache http components 或者 Okhttp)

在这里插入图片描述

Hystrix概念

Hystrix 是一个供分布式系统使用,提供延迟和容错功能,保证复杂的分布系统在面临不可避免的失败时,仍能有其弹性。

比如系统中有很多服务,当某些服务不稳定的时候,使用这些服务的用户线程将会阻塞,如果没有隔离机制,系统随时就有可能会挂掉,从而带来很大的风险。SpringCloud使用Hystrix组件提供断路器、资源隔离与自我修复功能。下图表示服务B触发了断路器,阻止了级联失败
在这里插入图片描述

feign结合Hystrix使用

在service的pom中添加依赖

注意springboot2.2.1对应cloudSR12;否则hystrix容易依赖失败

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

<!--        hystrix依赖,主要是用  @HystrixCommand -->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-hystrix -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
在配置文件中添加hystrix配置
#开启熔断机制
feign.hystrix.enabled=true
# 设置hystrix超时时间,默认1000ms
hystrix.command.default.execution.isolation.thread.timeoutInMilliseco

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值