谷粒学院-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();
}