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

简介: 简介:快速学习课程管理-删除小节删除视频(服务调用)

开发者学堂课程【微服务+全栈在线教育实战项目演练(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,把他删掉,但在过程中要注意先删除视频,再删除小节,因为数据已经没有了,这个顺序要注意,这样的话,我们就完成了完整的流程,完成之后,将效果试一下,看一下最终的结果是什么样的。

相关文章
|
11月前
|
JavaScript 前端开发
|
前端开发
在Promise链中是否可以多次使用catch方法?
在Promise链中是否可以多次使用catch方法?
487 154
|
机器学习/深度学习 人工智能 自然语言处理
了解AIGC:让AI创造内容,改变未来
了解AIGC:让AI创造内容,改变未来
1562 2
|
监控 架构师 安全
企业架构(EA)项目开发综合指南
企业架构(EA)是一种全面的方法,用于对齐企业的业务目标与其 IT 战略和资源。EA 涵盖了企业的各个层面,包括业务流程、信息流、应用系统和技术基础设施。本指南将详细探讨 EA 项目开发的关键步骤、[EA](https://www.visual-paradigm.com/features/enterprise-architecture-diagram-tool/) 与 TOGAF、ArchiMate 以及其他建模图(如 BPMN 和 UML)之间的关系,以及推荐 Visual Paradigm 作为 EA 团队的最佳解决方案。
671 3
|
SQL 安全 关系型数据库
关系型数据库SQL server DELETE 语句
【8月更文挑战第3天】
486 10
|
弹性计算 应用服务中间件 异构计算
阿里云服务器多少钱一小时?在哪查询1小时价格表?
阿里云服务器按量付费模式下,2核2G配置的ECS经济型e实例每小时费用为0.094元。不同配置的实例价格各异,如2核4G配置的ECS经济型e实例每小时0.225元,4核8G配置的ECS通用算力型u1实例每小时0.702元。用户可通过阿里云官网查询具体价格。包年包月模式下,2核2G3M服务器99元/年,更加经济实惠。
831 0
|
SQL 前端开发 Java
谷粒商城笔记+踩坑(15)——商品详情搭建+异步编排
查询 pms_spu_info_desc@Autowired// 4、获取 spu 的介绍 pms_spu_info_desc获取线程池的属性值这里直接调用与配置文件相对应的属性配置类@Bean。
谷粒商城笔记+踩坑(15)——商品详情搭建+异步编排
|
机器学习/深度学习 人工智能 自然语言处理
大语言模型的应用探索—AI Agent初探!
大语言模型的应用探索—AI Agent初探!
422 0
|
Java Spring
Spring初始化加速的思路和方案问题之DAG分析在Spring并行初始化中面临哪些困难
Spring初始化加速的思路和方案问题之DAG分析在Spring并行初始化中面临哪些困难
301 2

热门文章

最新文章