Mooc项目开发笔记(十九):小节页面视频删除前后端、SpringCloud简介、搭建服务发现Nacos、搭建服务调用Feign、删除小节删除阿里云视频

一、小节页面视频删除前后端实现

1、service

接口

void deleteVideoById(String videoId);

实现

@Override
public void deleteVideoById(String videoId) {
    try {
        DefaultAcsClient client = InitVodClient.initVodClient(ConstantVodUtils.KEY_ID, ConstantVodUtils.KEY_SECRET);
        DeleteVideoRequest request = new DeleteVideoRequest();
        request.setVideoIds(videoId);
        client.getAcsResponse(request);
    } catch (Exception e) {
        e.printStackTrace();
        throw new CustomException(20001, "删除小节视频失败");
    }
}

2、controller

/**
     * 删除小节视频
     * @param videoId
     * @return
     */
@DeleteMapping("/{videoId}")
public R deleteVideoById(@PathVariable("videoId") String videoId) {
    vodService.deleteVideoById(videoId);
    return R.ok();
}

3、前端定义api

src/api/edu/video.js中添加如下api:

    /**
     * 删除小节视频
     */
    deleteAliYunVideo(id){
        return request({
            url: `/eduvod/video/${id}`,
            method: 'delete'
          })
    },

4、组件方法

views/edu/course/chapter.vue中添加如下方法:

    //移除视频的方法
    handleVodRemove(file, fileList){
      videoApi.deleteAliYunVideo(this.video.videoSourceId)
          .then(response => {
                this.$message({
                    type: 'success',
                    message: '小节视频删除成功'
                })
                //把文件列表清空
                this.fileList = []
                //清空data中视频的id和name,防止添加到数据库
                this.video.videoSourceId = ''
                this.video.videoOriginalName = ''
          })
        
    },

    
    //移除视频之前调用的方法
    beforeVodRemove(file, fileList){
      return this.$confirm(`确定移除 ${file.name}?`)
    },

5、测试

点击删除跳出提示框
Mooc项目开发笔记(十九):小节页面视频删除前后端、SpringCloud简介、搭建服务发现Nacos、搭建服务调用Feign、删除小节删除阿里云视频_第1张图片

点击ok,提示小节视频删除成功
Mooc项目开发笔记(十九):小节页面视频删除前后端、SpringCloud简介、搭建服务发现Nacos、搭建服务调用Feign、删除小节删除阿里云视频_第2张图片

点击确定之后,查看数据库中没有视频信息
Mooc项目开发笔记(十九):小节页面视频删除前后端、SpringCloud简介、搭建服务发现Nacos、搭建服务调用Feign、删除小节删除阿里云视频_第3张图片

6、修改小节时视频回显

views/edu/course/chapter.vue中修改如下方法:

    //打开修改小节弹窗
    openEditVideo(id){
        //根据id从服务器获取小节信息
        videoApi.getVideoById(id)
            .then(response => {
                this.video = response.data.video
                //回显添加的视频
                if (this.video.videoOriginalName != '')
                  this.fileList = [{'name': this.video.videoOriginalName}]
            })

        //显示修改弹窗
        this.dialogVideoFormVisible = true
    },

二、Spring Cloud介绍

1、微服务的由来

微服务最早由Martin Fowler与James Lewis于2014年共同提出,微服务架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API或者RPC

这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些服务使用不同的编程语言实现,以及不同数据存储技术,并保持最低限度的集中式管理。

2、微服务与单体架构区别

(1)单体架构所有的模块全都耦合在一块,代码量大,维护困难。

​ 微服务每个模块就相当于一个单独的项目,代码量明显减少,遇到问题也相对来说比较好解决。

(2)单体架构所有的模块都共用一个数据库,存储方式比较单一。

​ 微服务每个模块都可以使用不同的存储方式(比如有的用redis,有的用mysql等),数据库也是单个模块对应自己的数据库。

(3)单体架构所有的模块开发所使用的技术一样。

​ 微服务每个模块都可以使用不同的开发技术,开发模式更灵活。

3、什么是Spring Cloud

  • Spring Cloud是一系列框架的集合。

  • Spring Cloud里面有很多框架(技术),使用Spring Cloud里面这些框架可以实现微服务操作

  • Spring Cloud依赖于SpringBoot技术

4、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。

5、Spring Cloud相关基础服务组件

服务发现——Netflix Eureka (Nacos)

服务调用——Netflix Feign

熔断器——Netflix Hystrix

服务网关——Spring Cloud GateWay

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

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

三、搭建Nacos服务

1、基本概念

**1)**Nacos 是阿里巴巴推出来的一个新开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

**2)**常见的注册中心:

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

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

  • Consul(原生,GO语言开发)

  • Nacos

**3)**Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现、配置和管理。

Nacos主要提供以下四大功能:

  • 服务发现和服务健康监测

  • 动态配置服务

  • 动态DNS服务

  • 服务及其元数据管理
    Mooc项目开发笔记(十九):小节页面视频删除前后端、SpringCloud简介、搭建服务发现Nacos、搭建服务调用Feign、删除小节删除阿里云视频_第4张图片

2、Nacos下载和安装

(1)下载地址和版本

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

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

(2)启动nacos服务

- Linux/Unix/Mac

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

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

- Windows

启动命令:cmd startup.cmd 或者双击startup.cmd运行文件。

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

用户名密码:nacos/nacos

登录之后显示如下界面
Mooc项目开发笔记(十九):小节页面视频删除前后端、SpringCloud简介、搭建服务发现Nacos、搭建服务调用Feign、删除小节删除阿里云视频_第5张图片

四、服务注册(service_edu为例)

把service-edu微服务注册到注册中心中,service-vod步骤相同

1、在service模块配置pom

在service的pom文件中配置Nacos客户端的pom依赖


<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>

2、添加服务配置信息

在service_edu中配置application.properties,在客户端微服务中添加注册Nacos服务的配置信息

# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

3、添加Nacos客户端注解

在客户端微服务启动类中添加注解

@EnableDiscoveryClient

4、启动客户端微服务

启动注册中心

启动已注册的微服务,可以在Nacos服务列表中看到被注册的微服务
Mooc项目开发笔记(十九):小节页面视频删除前后端、SpringCloud简介、搭建服务发现Nacos、搭建服务调用Feign、删除小节删除阿里云视频_第6张图片

5、注册service_vod

按照上面步骤对vod进行注册
Mooc项目开发笔记(十九):小节页面视频删除前后端、SpringCloud简介、搭建服务发现Nacos、搭建服务调用Feign、删除小节删除阿里云视频_第7张图片

五、服务调用-Feign(删除小节删除视频为例)

1、基本概念

Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。

Spring Cloud Feign是基于Netflix feign实现,助我们定义和实现依赖服务接口的定义。在Spring Cloud feign的实现下,只需要创建一个接口并用注解方式配置它,即可完成服务提供方的接口绑定,简化了在使用Spring Cloud Ribbon时自行封装服务调用客户端的开发量。

2、在service模块添加pom依赖


<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-openfeignartifactId>
dependency>

3、在调用端的启动类添加注解

在service_edu模块的启动类中添加如下注解

@EnableFeignClients

4、创建包和接口

在service_edu创建client包,并在其创建如下接口

其中

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

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

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

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

@Component
@FeignClient("service-vod")
public interface VodClient {

    //定义调用方法的路径

    //删除小节视频
    @DeleteMapping("/eduvod/video/{videoId}")
    public R deleteVideoById(@PathVariable("videoId") String videoId);

}

5、调用微服务

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

    @Autowired
    private VodClient vodClient;

    /**
     * 根据课程id删除该课程的小节
     * @param courseId
     */
    //TODO 删除小节时,删除对应的视频
    @Override
    public void removeVideoByCourseId(String courseId) {
        //根据小节id获取到视频id
        EduVideo video = this.getById(courseId);
        String videoId = video.getVideoSourceId();
        //再根据视频ID删除小节
        if(!StringUtils.isEmpty(videoId))
            vodClient.deleteVideoById(videoId);

        baseMapper.deleteById(id);
    }

6、测试

重新启动模块

首先添加一个小节,并在小节中添加视频
Mooc项目开发笔记(十九):小节页面视频删除前后端、SpringCloud简介、搭建服务发现Nacos、搭建服务调用Feign、删除小节删除阿里云视频_第8张图片

提示删除成功,再次进入视频删除成功,数据库记录删除成功

Mooc项目开发笔记(十九):小节页面视频删除前后端、SpringCloud简介、搭建服务发现Nacos、搭建服务调用Feign、删除小节删除阿里云视频_第9张图片

你可能感兴趣的:(Mooc,项目,后端,java,spring,boot,Spring,Cloud)