在线教育-谷粒学院学习笔记(八)
文章目录
- 1 内容介绍
- 2 微服务
- 3 微服务实现删除nacos
- 4 删除课程-删除视频
- 5 Hystrix
1 内容介绍
- Spring Colud
- 删除小节-删除视频
- 删除课程-删除视频
2 微服务
- service 三个服务
- service_edu 8001
- service_oss 8002
- service_vod 8003
- 微服务
- 微服务是架构风格
- 把一个项目拆分成多个独立的服务,多个服务独立运行,每个服务占用独立的进程
- 框架
- Spring Cloud
- Dubbo
- Spring Cloud
- 并不是一种技术,而是很多框架的集合
- 包含很多框架,能够使用这些框架实现微服务操作
- 需要依赖Spring Boot技术
- Spring Cloud相关基础服务组件
- 服务发现——Netflix Eureka (Nacos)
- 服务调用——Netflix Feign
- 熔断器——Netflix Hystrix
- 服务网关——Spring Cloud GateWay
- 分布式配置——Spring Cloud Config (Nacos)
- 消息总线 —— Spring Cloud Bus (Nacos)
- 版本
- Boot:2.2.1
- Cloud:Hoxton
3 微服务实现删除nacos
删除小节 同时删除阿里云视频
service_edu ---------> service_vod删除小节 调用 删除视频
注册中心Nacos
实现不同的微服务模块之间的调用,需要将模块在注册中心进行注册,模块间互相调用
下载安装nacos
版本:1.1.4;端口:8848;登录:nacos、nacos
在nacos中注入service_edu
1 引入依赖service/pom.xml
<!--服务注册--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
2 在要注册的服务的配置文件中进行配置nacos地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
3 在启动类上添加注解
@EnableDiscoveryClient // nacos注册
feign调用
1 引入依赖 service pom.xml
<!--服务调用--> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
2 在调用端service_edu服务的启动类添加注解
@EnableFeignClients public class EduApplication {
3 在调用端创建interface,使用注解指定调用服务名称,定义调用的方法路径
com.mys.eduservice.client
@FeignClient("service-vod") public interface VodClient {// 定义调用的方法路径// 根据视频id删除阿里云的视频@DeleteMapping("/eduvod/video/removeAlyVideo/{id}")public R removeAlyVideo(@PathVariable("id") String id); // 注:@PathVariable一定要写参数名称,否则会出错 }
4 实现代码删除小节-删除阿里云视频
// 删除小节,并删除对应阿里云的视频 @DeleteMapping("{id}") public R deleteVideo(@PathVariable String id) {// 先根据小节id获取视频id,再调用方法删除视频EduVideo video = videoService.getById(id);String videoSourceId = video.getVideoSourceId();// 判断小节里面是否有视频if (!StringUtils.isEmpty(videoSourceId)) {// 根据视频id,远程调用实现删除视频vodClient.removeAlyVideo(videoSourceId);}// 删除小节videoService.removeById(id);return R.ok(); }
4 删除课程-删除视频
一个课程有很多章节,一个章节有很多小节,每个小节有视频
删除课程时,需要删除多个视频
1 在service-vod创建接口,删除多个视频
// 删除多个阿里云视频
// 参数:多个视频id
@DeleteMapping("delete-batch")
public R deleteBatch(@RequestParam("videoIdList") List<String> videoIdList) {vodService.removeMoreAlyVideo(videoIdList);return R.ok();
}
@Override
public void removeMoreAlyVideo(List<String> videoIdList) {try {// 1 创建初始化对象DefaultAcsClient client = InitVodClient.initVodClient(ConstantVodUtils.ACCESS_KEY_ID, ConstantVodUtils.ACCESS_KEY_SECRET);// 2 创建request对象DeleteVideoRequest request = new DeleteVideoRequest();// videoList值转换成:1,2,3String videoIds = StringUtils.join(videoIdList, ",");// 3 设置视频idrequest.setVideoIds(videoIds);// 4 调用删除视频client.getAcsResponse(request);} catch (Exception e) {e.printStackTrace();throw new GuliException(20001, "删除视频失败");}
}
2 在service-edu调用service-vod接口,实现删除多个视频
com.mys.eduservice.service.impl.EduVideoServiceImpl
public void removeVideoByCourseId(String courseId) {// 根据课程id查询所有视频idQueryWrapper<EduVideo> wrapperVideo = new QueryWrapper<>();// wrapper.select重要,记住!wrapperVideo.select("video_source_id");List<EduVideo> eduVideoList = baseMapper.selectList(wrapperVideo);// List<Video> => List<String>List<String> videoIds = new ArrayList<>();for (EduVideo eduVideo : eduVideoList) {String videoSourceId = eduVideo.getVideoSourceId();if (!StringUtils.isEmpty(videoSourceId)) {videoIds.add(videoSourceId);}}// 根据多个视频id,删除多个视频if (videoIds.size() > 0) {vodClient.deleteBatch(videoIds);}// 根据课程id删除小节QueryWrapper<EduVideo> wrapper = new QueryWrapper<>();wrapper.eq("course_id", courseId);baseMapper.delete(wrapper);
}
5 Hystrix
Spring Cloud接口调用过程:
Feign —>Hystrix —>Ribbon —>Http Client
1 添加熔断器相关依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency><!--hystrix依赖,主要是用 @HystrixCommand -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2 调用配置文件中开启熔断器
# 开启熔断机制
feign.hystrix.enabled=true
# 设置hystrix超时时间。默认1000ms
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=6000
3 在创建interface之后,还需要创建其对应实现类,实现方法,出错了输出内容
@Component
public class VodFileDegradeFeignClient implements VodClient {// 出错之后执行@Overridepublic R removeAlyVideo(String id) {return R.error().message("删除视频出错");}@Overridepublic R deleteBatch(List<String> videoIdList) {return R.error().message("删除多个视频出错");}
}
4 在interface上面添加注解和属性
@FeignClient(name = "service-vod", fallback = VodFileDegradeFeignClient.class)
public interface VodClient {
在线教育-谷粒学院学习笔记(八)相关推荐
- 尚硅谷谷粒学院学习笔记(防坑点的总结部分勘误)
谷粒学院学习笔记 部分勘误 数据库设计规约 模块说明 环境搭建 创建一个Spring Boot 的父工程,版本使用:2.2.1.RELEASE 父工程pom.xml里面添加 在pom.xml中添加依赖 ...
- 尚硅谷谷粒学院学习笔记9--前台用户登录,注册,整合jwt,微信登录
用户登录业务 单点登录(Single Sign On),简称SSO. 用户只需要登陆一次就可以访问所有相互信任的应用系统 单点登录三种常见方式 session广播机制实现 使用redis+cookie ...
- 尚硅谷谷粒学院学习笔记11-- 微信支付,课程详情页面功能完善
课程支付需求描述 课程支付说明 (1)课程分为免费课程和付费课程,如果是免费课程可以直接观看,如果是付费观看的课程,用户需下单支付后才可以观看 (2)如果是免费课程,在用户选择课程,进入到课程详情页面 ...
- ReactJS学习笔记八:动画
ReactJS学习笔记八:动画 分类: react学习笔记 javascript2015-07-06 20:27 321人阅读 评论(0) 收藏 举报 react动画 目录(?)[+] 这里只讨论Re ...
- 【opencv学习笔记八】创建TrackBar轨迹条
createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...
- python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑
python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...
- ROS学习笔记八:创建ROS msg和srv
ROS学习笔记八:创建ROS msg和srv 本节主要讲述了如何创建和建立ROS msg和srv,同时使用命令行工具rosmsg.rossrv和roscp. msg和srv简介 msg:描述ROS m ...
- Halcon 学习笔记八:颜色识别
Halcon 学习笔记八:颜色识别 一.图像处理需要的知识 二.图像处理的预处理和分割过程 二.颜色识别的方法 三.例子一 四.例子二 五.例子三 一.图像处理需要的知识 1.图像处理基础(rgb(h ...
- ZooKeeper学习笔记(八):ZooKeeper集群写数据原理
写数据原理 写流程直接请求发送给Leader节点 这里假设集群中有三个zookeeper服务端 ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种 ...
最新文章
- Softmax和Cross-entropy是什么关系?
- js关闭窗口无提示,不支持FF
- ndk use of undeclared identifier #39malloc#39
- 包含多个段的程序---汇编学习笔记
- webpack 配置
- try... except异常处理结构
- 在危机中呈现转机的网络管理
- GIS之旅——研究生总结
- java基类能调用虚函数_如果我要重写基类的虚函数,可以调用它吗?
- c#退出窗口跳转_详解C#切换窗口
- oracle 错误 1013,ORA-03113错误解决一例
- halcon教程- 边缘检测 亚像素边缘提取 轮廓提取
- 安装企业级的dokuwiki文档系统
- python 微信自动回复机器人
- Cobaltstrike内网工具的使用笔记
- 本科进了大厂拿高薪,为什么硕士和博士却要挤破头进高校?
- icp光谱仪的工作原理_ICP基本原理解析.ppt
- mysql 分区 分表 分库分表
- Mac开发必备工具(一)—— Homebrew
- Java详解去除字符串中空格的方法
热门文章
- VS实现rar格式压缩包的解压详解
- python list超出范围_错误:列表索引超出范围Python(Error: List Index out of Range Python)...
- 一次聚类引发的一系列问题(多线程篇-多线程慢于单线程)
- 零基础学摄影 || 人像摄影下相机参数设置
- Python cv2读取/存储图片中含中文路径失败的解决方法
- Office 365实现多人在线编辑同一个文档(下)
- python实现scp功能_如何在Python中进行scp?
- WPF 方块按钮 仿照360
- hadoop2.9安装及配置_阿里云服务器上装Hadoop的心得(内附Hadoop2.9.2详细安装教程)...
- python和java和c语言的区别-python和c语言的主要区别总结