课程管理-删除小节删除视频(服务调用) | 学习笔记

本文涉及的产品
视频点播 VOD,流量+存储+转码
简介: 简介:快速学习课程管理-删除小节删除视频(服务调用)

开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):课程管理-删除小节删除视频(服务调用)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/667/detail/11416


课程管理-删除小节删除视频(服务调用)

 

目录:

一、 基本概念

二、 前提条件:把互相调用服务在 nacos 进行注册


一、 基本概念

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

l Feign支持多种注解,例如Feign自带的注解或者 JAX-RS 注解等。

l SpringCloud对Feign 进行了增强,使 Feign 支持了 SpringMVC 注解,并整合了Ribbon和Eureka,从而让 Feign 的使用更加方便。

l SpringCloud Feign是基于 Netflixfeign 实现,整合了 SpringCloud Ribbon 和SpringCloud Hystrix,除了提供这两者的强大功能外,还提供了一种声明式的 Web 服务客户端定义的方式

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

Netflix 是一个公司开发的组件,而 spring cloud 中的组件都是它开发的,后来使用 Nacos 作为替换。

在做服务调用的时候,通过一个模块调用另一个模块。还写到 Feign 支持了SpringMVC 注解,让 Feign 的使用更加方便。


二、 前提条件:把互相调用服务在 nacos 进行注册

(1) 引入依赖在 service 模块

<!--服务调用-->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-openfeign</artifactId>

</dependency>

找到 service,打开,放入 openfeign

引入依赖,就会开始下载,多等待一会,就能下载成功。

在课件中,有很多组件,这些代码都在一个地方,在调用端的启动类,因为service-edu 要调用 service-vod ,所以调用段是 service-edu ,或者是我们的消费者,service-vod 是被调用端,或者是生产者,所以我们的代码要写在调用端中,就是在 service-edu 中,就是调用端。

(2)、在调用端 service-edu 服务启动类添加注解

使用服务发现,注册之后需要找到服务,进行操作。需要加这个注解,@EnableFeignClients,这是我们的第二部分。

在我们的调用端service-edu,找到启动类,加上注解,

@SpringBootApplication

@EnableDiscoveryClient t //nacos注册

加一个服务注解

@EnableFeignClients

这个必须要加,这样才能做到服务调用,

@ComponentScan(basePackages = {"com. atguigu"}) public class EduApplication {

(3)、在调用端创建一个 interface 接口,使用注解指定调用服务名称,定义调用的方法路径

需要强调,调用代码是一个固定结构,都需要满足。

在调用端建立一个 interface,然后在上面加注解 @Component,还有一个@FeignclIent("service-vod"),就是加上要调用的名字,也就是说,通过 service-vdu调用service-vod,把这个加到注解上,这是我们要写到的,然后在 interface中加上要调接口的地址,比如说是 vod 的方法,这一条一定要写上,这是一个固定的过程。

来到它的启动类上,重新启动,在 edu 中,先加一个 interface,先写一个包,client,

image.png

在这里创建一个 interface

创建之后,在这个 interface 中先加第一个注解,@component,加完之后再加第二个注解@FeignClient,加上它要调用的服务的名字,服务的名字就是列表中的名字,即 service-vod,把他加入进去,名字必须要写正确,而且名字必须是配置中的名字,因为他会在注册中心中注册进去,尽量不要写错,建议复制粘贴。

@FeignClient("service-vod")

@Component

public interface VodClient {

完成之后,在 interface 里面,我们要定义调用的方法路径,给大家说明应该怎么做。因为我们现在是 edu 要调用 vod,所以我们先把 vod 找到,

要调用的是这个方法:

//根据视频 id 删除阿里云视频

@DeleteMapping("/eduvod/video /removeAlyVideo/ {id}")

public R removeAlyVideo(@PathVariable String id) {

最简单的办法就是我们直接复制粘贴就可以,所以我们直接复制粘贴,

//定义调用的方法路径

//根据视频 id 删除阿里云视频

@DeleteMapping("removeAlyVideo/ {id}")

public R removeAlyVideo(@PathVariable String id)

在复制过来之后,我们要改一个地方,就是把他的路径改为完全路径,之前是removeAlyVideo,我们再加上/eduvod/video部分,把路径写得更完全,就是把他们都给加上,成为/eduvod/video /removeAlyVideo。

在 interface 中,第一我们要调用这个方法的路径,因为我们最终调的就是这个方法,public R removeAlyVideo(@PathVariable String id),所以我们要把它方法里的参数定义也写过去,然后把路径写的完全点,把它们都写出来,这样的话就可以了,这就是我们的第三步。

所以我们应该知道这是一个固定的过程,后面再有方法就可以直接加进去,/eduvod/video这些不要写错,这就是一些说明。

这里边还有一些细节,需要特别注意:

创建 client 包

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

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

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

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

//定义调用的方法路径

//根据视频 id 删除阿里云视频

PathVariabler 的注解就是取 id 的值,而这个值必须指定一个名称,比如说叫一个id,如果不写的话就会有问题,名称一样就可以了,这是我们调用中一个特别重要的方法,因为他要给你找名称中的那个参数,进行传递,这样的话,我们的第三步就算完成了。

总结如下:

@FeignClient("service-vod""

@Component

public interface VodClient

//为定义调用的方法路径

//根据视频id删除阿里云视频

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

@DeleteMapping("leduvodivideoiremoveAlyVideol{id}") public R removeAlyVideo(@PathVariable(""id"") String id):

(4)、实现代码删除小节删除阿里云视频

先找到我们的方法位置,因为我们删除小节是在 service-edu 中,那我们就找到方法:

videoService.removeById(id)

return R. ok():

删除小节删除视频,做个实践。

我们可以把它写在 service 中,使用 control 进行编写,因为我们刚才创建了一个interface,所以我们可以把 interface 注入到 control 中,可以使用这个方法,我们可以做一个注入:

//注入 vodClient

@Autowired

private VodClient vodClient

把它注入之后,我们就可以调用里面的方法,就我们刚才定义的方法,里面传入一个视频的 id,

vodClient.removeAlyVideo("视频id")

videoService.removeById(id);

return R.ok();

我们可以把定义的放入我们的方法,就能实现我们调用 vod 的一个方法,这个过程他的底层是怎么调到的,对此进行一个说明,我们要注意,这是一个 interface 接口,而 interface 接口对应的一般是一个实现类,比如说我们的 service,有这个interface 实现类,我们可以发现,上面的只有一个 interface,它的实现类是什么?

我们可以理解为它的实现类将会于它怎么做。当我们去调用这个接口的时候,他就会通过你的名字远程调用你的 vod,把 vod 中的话给你调过来,这就相当于给我们做实现类,vodClient 主要写接口,就是远程调用,是一种说法,通过 edu 根据服务名字调用 vod 中的地址方法,把值就给他传过来,这是他本身的一个过程,所以她也可以理解为远程调用的方式,相当于我们实现类的一个过程,就是服务名字通过注册中心做的调用,所以这个我们需要知道,我么们的写法就这样来做,写完之后,我们要将方法做一个完善,

如下:

//删除小节

//TODO 后面这个方法需要完善:删除小节时候,同时把阿里云里面视频删除@DeleteMapping (" {id}")

public R deleteVideo(@PathVariable String id) {

vodClient.removeAlyVideo("视频id");

videoService. removeById(id);

return R. ok();

现在它的原始方法是删除小节,也就是说,上面的 id 就是删除小节的 id,但现在("视频id");这里不能传 id,因为他不是视频 id,我们要根据视频 id 才能删除视频,所以我们需要根据小节 id 得到视频 id,得到之后,再调用方法才能做删除,

过程如下:

//删除小节,删除对应的阿里云视频

@DeleteMapping("{id}")

public R deleteVideo(@PathVariable String id){

//根据小节id获取视频id,调用方法实现视频删除

先看一下表 eduvod,查到小节 id,对象中就有视频 id,那我们将id得到再调用就可以得到。

先查询,根据小节 id 查,在 control 调用 service,得到 video 对象,再得到视频id,将视频 id 传过来,

EduVideo eduVideo = videoService.getById(id);

String videoSourceId =eduVideo.getVideoSourceId();

//判断小节里面是否有视频 id

这样的话,我们这个视频就算完成了,

if(!StringUtils.isEmpty(videoSourceId)){

就是传到你的方法中,做一个调用,加一个注释

//根据视频 id,远程调用实现视频删除,

vodClient.removeAlyVideo(VideoSourceid);

这就是我们基本的一个代码,但是它有一个小问题,我们可以看表,因为视频id中可能没有值,如果没有视频,那我们就不需要删除,有视频我们才需要删除,没有视频删除的话会出现问题,我们现在需要做一个判断,如果 videoSourceId 的值不为空,那我们就要删除视频,调用以上代码进行删除;等于空,那我们就不需要删除,这个需要进行一个判断。最后再去删除小节。

//删除小节

videoService.removeBvId(id):

return R.ok();

//修改小节 TODO

这就是我们最终的代码,就算完成了。

上面的注释就可以删除了,//TODO 后面这个方法需要完善:删除小节时候,同时把阿里云里面视频删除,

在这里,有一个细节问题需要注意,要注意删除的顺序,是先删除视频,然后删除小节,所以我们不能弄乱顺序,先删除小节,再删除视频,这样的话就不正确了,如果我们把小节删除之后,这里数据就会消失,当你根据小节 id 查找视频 id 时,就查不到了,所以我们要先删除视频,再删除小节,所以一定要注意顺序,

因为我们需要查询视频 id,这里的细节大家需要注意,所以,我们的代码就完成了。

通过 spring cloud 中的 nacos 组件,做到远程调用,就是一个模块调用另一个模块,这个过程就叫远程调用,通过这个方法,我们就做到了删除视频删除小节的功能。

这样,我们就写完这样一段基本代码了,最后,我们再看一遍这样的一个过程,最后,做一个最终测试,看看最终的效果。先启用 nacos,访问进入界面,

做完之后,把我们要互相调用的服务在注册中心进行注册,加入以来,加入配置,加入启动类,最终都注册过后,我们就能看到这些服务,注册之后,我们可以进行一个调用,通过 edu 调用 vod,在调用端实现,因为是 edu 调用 vod,所以 edu 是调用端,所以先添加一个依赖,

lependency>

<groupId org. springframework.cloud</groupId

<artifactId spring-cloud-starter-openfeign</artifactId </dependency>

再在启动类上面加上一个注解,为了做到服务调用过程,

@EnableFeignClients

再次创建一个 interface,指定要调用的服务的名字,包括地址

service-vod

eduvod/video/removeAlyVideo/ {id}

把方法从 vod 中复制过来,然后加入地址就可以了,这就是我们的第三步,写完之后我们开始调用,先把 vod 注入进来

//注入vodClient

@Autowired

private VodClient vodclient;

再做到远程调用,有接口,判断时间类,就是远程调用过程,最后,在里边根据小节 id,得到视频 id,把他删掉,但在过程中要注意先删除视频,再删除小节,因为数据已经没有了,这个顺序要注意,这样的话,我们就完成了完整的流程,完成之后,将效果试一下,看一下最终的结果是什么样的。

相关文章
|
6月前
|
前端开发
SSM整合-前后台协议联调(列表功能、添加功能、添加功能状态处理、修改功能、删除功能)
SSM整合-前后台协议联调(列表功能、添加功能、添加功能状态处理、修改功能、删除功能)
79 0
|
2月前
|
SQL 关系型数据库 MySQL
学成在线笔记+踩坑(3)——【内容模块】课程分类查询、课程增改删、课程计划增删改查,统一异常处理+JSR303校验
课程分类查询、课程新增、统一异常处理、统一封装结果类、JSR303校验、修改课程、查询课程计划、新增/修改课程计划
学成在线笔记+踩坑(3)——【内容模块】课程分类查询、课程增改删、课程计划增删改查,统一异常处理+JSR303校验
|
4月前
|
SQL 前端开发 Java
若依修改03----利用若依代码生成器,生成课程管理的前后端代码,课程的条件搜索接口,一旦数据表创建好了,直接交给若依代码的生成器就好了,配置代码生成信息,包含基本信息,字段信息,生成信息。字段信息决
若依修改03----利用若依代码生成器,生成课程管理的前后端代码,课程的条件搜索接口,一旦数据表创建好了,直接交给若依代码的生成器就好了,配置代码生成信息,包含基本信息,字段信息,生成信息。字段信息决
|
SQL Java 开发者
后台分类管理之删除分类 | 学习笔记
快速学习后台分类管理之删除分类
142 0
|
前端开发
前端学习笔记202303学习笔记第五天-删除默认跳转行为
前端学习笔记202303学习笔记第五天-删除默认跳转行为
52 0
前端学习笔记202303学习笔记第五天-删除默认跳转行为
|
存储 Java 对象存储
JavaWeb第八章课后题 会话跟踪
JavaWeb第八章课后题 会话跟踪
136 0
|
JSON 前端开发 Java
基于Springboot外卖系统14:菜品新增模块+多个数据表操作+文件上传下载复用
后台系统中可以管理菜品信息,通过新增功能来添加一个新的菜品,在添加菜品时需要选择当前菜品所属的菜品分类,并且需要上传菜品图片,在移动端会按照菜品分类来展示对应的菜品信息 。
264 0
|
前端开发 数据库 开发者
课程管理-添加和删除小节 | 学习笔记
简介:快速学习课程管理-添加和删除小节
144 0
课程管理-添加和删除小节 | 学习笔记
|
Java 测试技术 应用服务中间件
课程管理-删除小节删除视频(功能测试) | 学习笔记
简介:快速学习课程管理-删除小节删除视频(功能测试)
127 0
课程管理-删除小节删除视频(功能测试) | 学习笔记
|
前端开发 Java Nacos
课程管理-删除课程删除视频(最终测试) | 学习笔记
简介:快速学习课程管理-删除课程删除视频(最终测试)
115 0
课程管理-删除课程删除视频(最终测试) | 学习笔记