谷粒学苑_第十天
创始人
2024-02-16 22:56:08

第十天

视频删除

后端

相关sdk在阿里云视频点播文档的服务端SDK–>Java SDK–>媒资管理–>删除视频

复制前面的InitObject到utils里

删除的方法

@DeleteMapping("{id}")public R removeAliyunVideo(@PathVariable String id){try{DefaultAcsClient defaultAcsClient = InitVodCilent.initVodClient(ConstantVodUtils.ACCESS_KEY_ID,ConstantVodUtils.ACCESS_KEY_SECRET);//创建一个删除视频request对象DeleteVideoRequest deleteVideoRequest = new DeleteVideoRequest();//设置iddeleteVideoRequest.setVideoIds(id);//获取结果DeleteVideoResponse acsResponse = defaultAcsClient.getAcsResponse(deleteVideoRequest);return R.ok();//初始化对象}catch (Exception e){throw new GuliException(20001,"删除视频失败");}}

前端

video.js添加

, //删除视频deleteAliyunVideo(id){return request({url: 'http://localhost:8003/eduvod/video/'+id,method:'delete'})}
//视频操作//上传成功的方法ListhandleVodUploadSuccess(response,file,fileList){console.log(response.data.videoId)this.video.videoSourceId=response.data.videoIdthis.video.videoOriginalName=file.name},//上传前handleUploadExceed(files, fileList){this.$message.warning('如果要重新上传,请先删除已有视频')},//删除上传beforeVodRemove(file,fileList){return this.$confirm(`确认删除 ${file.name}?`);},//点击确认调用的方法handleVodRemove(){console.log("删除api")videoapi.deleteAliyunVideo(this.video.videoSourceId).then(response=>{//提示信息this.message({type: 'success',message: '视频删除成功'});//文件列表清空this.fileList= []this.video.videoSourceId=''this.video.videoOriginalName=''})},

微服务

是一种架构风格

有多个服务,每个服务独立运行,不会相互影响,多个服务独立运行,服务占用独立进程

springcloud

是微服务的一种,本身并不是技术/框架,是很多技术/框架的集合

需要基于springboot来实现

基础服务组件

服务发现 Netfix Eureka( Nacos )
服务调用 Netfix Feign
熔断器 Netfix Hystrix
服务网关 Spring Cloud GateWay
分布式配置 Spring Cloud Config ( Nacos )
消息总线 Spring Cloud Bus ( Nacos )

springcloud的版本与springboot版本要一一对应

需要在官网查询

https://spring.io/projects/spring-cloud#overview

前面的名字是按照伦敦地铁站的名字,后面没写的了就直接用的年份时间版本

GA:稳定版

SNAPSHOT:快照版,随时更新

M:里程碑版

SR:正式版

CURRENT:当前推荐版

最好别选SNAPSHOT

点击后面的详细文档

这里就是对应的两个版本:

在这里插入图片描述

Nacos

类似于中介,将所有服务注册到注册中心,有服务需要某些功能可以调用其他服务来实现

常见的注册中心

Eureka:早期服务注册是用的Eureka,但是遇到性能瓶颈,不再维护

Zookeeper:可以配合dubbo

Consul:是用go开发的(禁止(中国)使用?)

Nacos实现原理

(有调用动作的是消费者,被调用的是生产者)

(生产者消费者身份是相对的,看谁调用谁)

主要功能的原理

在这里插入图片描述

还有心跳机制(连接确认)

自我保护机制(确保不出现雪崩)

动态dns(灵活优化网络)

Docker安装Nacos

官网文档

//或者看我这个

快速上手Nacos(Docker)

拉取镜像:

docker pull nacos/nacos-server

创建映射文件:

mkdir -p /root/nacos/init.d /root/nacos/logs
touch /root/nacos/init.d/custom.properties

写入一些内容

vim /root/nacos/init.d/custom.properties

management.endpoints.web.exposure.include=*

然后 保存并退出vim

生成容器:

docker run -d -p 8848:8848 -e MODE=standalone -e PREFER_HOST_MODE=hostname -v /root/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties -v /root/nacos/logs:/home/nacos/logs --restart always --name nacos nacos/nacos-server

运行容器:

docker start nacos

访问地址:

http://服务器ip:8848/nacos/#/login

用户名: nacos

密码: nacos

在这里插入图片描述

注册服务

引入nacos依赖:

service_edu与service的pom.xml里

org.springframework.cloudspring-cloud-starter-alibaba-nacos-discovery

service_edu配置

application

spring:cloud:nacos:discovery:server-addr: 192.168.199.100:8848 #服务地址

启动类注解

@EnableDiscoveryClient

启动成功并发现
在这里插入图片描述

同理把vod也加上依赖注解配置

在这里插入图片描述

Feign

服务调用用的

依赖:

org.springframework.cloudspring-cloud-starter-openfeign

调用端(service_edu)注解:

开启feign客户端

@EnableFeignClients

调用端接口:

service_edu创建一个client.VodClient

package com.lkw.eduservice.client;import com.lkw.commonutils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;@FeignClient("service-vod")//被调用的服务的名字
@Component
public interface VodClient {//定义方法路径//把service_vod的方法完完全全的复制来,路径改成完全路径@DeleteMapping("eduvod/video/{id}")public R removeAliyunVideo(@PathVariable("id") String id);
}

实现调用

在EduVideoController的deleteVideo调用注入vodClient

@Autowired
private VodClient vodClient;

出现错误:

no server available

是因为有nacos依赖的模块都要配置与添加服务注册

可能刚刚的oss还没加nacos配置或注解

批量删除

传输多个id可以用List

先写好vodservice的Controller

//删除多个视频的方法
@DeleteMapping("delete-batch")
public R deleteBatch(@RequestParam("videoIdList") List videoIdList) {vodService.removeMoreAlyVideo(videoIdList);return R.ok();
}

然后实现service接口的实现类

@Override
public void removeMoreAlyVideo(List videoIdList) {try {DefaultAcsClient defaultAcsClient = InitVodCilent.initVodClient(ConstantVodUtils.ACCESS_KEY_ID,ConstantVodUtils.ACCESS_KEY_SECRET);//创建一个删除视频request对象DeleteVideoRequest deleteVideoRequest = new DeleteVideoRequest();//遍历用逗号拼接String videoIds = StringUtils.join(videoIdList.toArray(), ",");//数组加分隔符拼接成字符串//或者听说String.join(",",list)也行//设置iddeleteVideoRequest.setVideoIds(videoIds);//获取结果DeleteVideoResponse acsResponse = defaultAcsClient.getAcsResponse(deleteVideoRequest);}catch(ClientException e){throw new GuliException(20001,"视频删除失败");}
}

在VodClient添加接口方法:

//删除多个视频的方法
@DeleteMapping("eduvod/video/delete-batch")
public R deleteBatch(@RequestParam("videoIdList") List videoIdList);

在 EduVideoServiceImpl写好调用方法

//先注入

    //注入@AutowiredVodClient vodClient;

改成:

@Override
public void removeVideoByCourseId(String courseId) {//根据课程id查询课程所有视频idQueryWrapper wrapperVod=new QueryWrapper<>();wrapperVod.eq("course_id",courseId);wrapperVod.select("video_source_id");List eduVideoList = baseMapper.selectList(wrapperVod);List videoIds = eduVideoList.stream().map(EduVideo::getVideoSourceId).collect(Collectors.toList());vodClient.deleteBatch(videoIds);QueryWrapper wrapper=new QueryWrapper<>();wrapper.eq("course_id",courseId);baseMapper.delete(wrapper);//TODO 删除对应视频的文件
}

丝袜哥测试

略,前端有bug先不修了,学完再看

Hystrix

是熔断器

熔断器是一定时间呢请求无回复,然后

熔断器前置知识

springcloud在接口调用上的经历:

接口化请求调用

Feign----按照服务名进行调用---->Hystrix----调不到断开连接---->Ribbon----负载均衡—>Http Client

Hystrix提供延迟容错功能

使用

在service_edu

依赖:

Nacos自动引入了ribbon openfeign自动引入hystrix

配置:

feign:hystrix:enabled: true

yml里好像不能配置超时时间

创建熔断器实现类:

package com.lkw.eduservice.client.impl;import com.lkw.commonutils.R;
import com.lkw.eduservice.client.VodClient;
import org.springframework.stereotype.Component;import java.util.List;@Component
public class VodClientImpl implements VodClient {@Overridepublic R removeAliyunVideo(String id) {return R.error().message("删除视频错误");}@Overridepublic R deleteBatch(List videoIdList) {return R.error().message("删除多个视频错误");}
}

修改注解

@FeignClient(name="service-vod",fallback = VodClientImpl.class)//被调用的服务的名字,熔断器的实现类

补充eduvideoController

//刪除小节
//删除小节同时把小节中的视频删除
@DeleteMapping("{id}")
public R deleteVideo(@PathVariable String id) {System.out.println(id);//根据小节id查询出视频id,进行删除EduVideo eduVideobyId = eduVideoService.getById(id);String videoSourceId = eduVideobyId.getVideoSourceId();//判断是否有视频,有就删除if (!StringUtils.isEmpty(videoSourceId)) {//远程调用vod删除视频R r = vodClient.removeVideo(videoSourceId);if(r.getCode()==20001)throw new GuliException(20001,"删除视频失败");}//删除小节eduVideoService.removeById(id);return R.ok();
}

断点调试

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...