最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

在线教育

IT圈 admin 2浏览 0评论

在线教育

文章目录

    • 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 {

在线教育

文章目录

    • 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 {
发布评论

评论列表 (0)

  1. 暂无评论