谷粒学院-17-Feign

基本概念

  • Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调 用HTTP API。
  • Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。
  • Spring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,从 而让Feign的使用更加方便。
  • Spring Cloud Feign是基于Netflix feign实现,整合了Spring Cloud Ribbon和Spring Cloud Hystrix, 除了提供这两者的强大功能外,还提供了一种声明式的Web服务客户端定义的方式。
  • Spring Cloud Feign帮助我们定义和实现依赖服务接口的定义。在Spring Cloud feign的实现下,只需 要创建一个接口并用注解方式配置它,即可完成服务提供方的接口绑定,简化了在使用Spring Cloud Ribbon时自行封装服务调用客户端的开发量。

实现服务调用

目标:

在edu-service服务中删除章节的同时,调用vod-service服务去删除章节对应的视频

流程:

导入依赖

<!--feign服务调用-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>2.1.3.RELEASE</version>
</dependency>

主程序类上添加注解开启feign

(注意点:只需要在调用服务端添加注解开启feign)

@EnableFeignClients

创建对应接口组件,在client包下创建VodClient接口

然后把要调用的函数的方法复制过来,稍加修改即可

@Component
@FeignClient("service-vod")
public interface VodClient {
    /*
    * 定义调用的方法路径(注意这里必须是完全路径)
    * 根据视频id删除阿里云视频
    * @PathVariable注解一定要指定参数名称,否则报错
    * */
    @DeleteMapping("/vodservice/vod/deleteVideo/{videoId}") //注意这个地方必须是完全路径
    public Result deleteVideo(@PathVariable("videoId") String videoId) throws GuliException;
}

测试调用

在删除小节的里面去调用删除视频的组件方法

@Autowired
VodClient vodClient;

@ApiOperation(value ="删除小节")
@DeleteMapping("/{id}")
public Result deleteVideo(
        @ApiParam(name="id",value="删除小节的id")
        @PathVariable("id")String id
) throws GuliException {
    // 注意要先删除视频
    System.out.println(eduVideoService.getById(id).getVideoSourceId());
    if (!StringUtils.isEmpty(eduVideoService.getById(id).getVideoSourceId())){
        vodClient.deleteVideo(eduVideoService.getById(id).getVideoSourceId());
    }
    // 再删除小节
    eduVideoService.removeById(id);
    return Result.success();
}
posted @ 2021-08-16 09:55  Coder-Wang  阅读(62)  评论(0编辑  收藏  举报