基本概念
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时自行封装服务调用客户端的开发量。
springboot整合openfeign
1.1、需求
service_edu服务调用service_vod服务的方法
1.2、引入依赖
<!--服务调用--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
@EnableFeignClients
方法以及参数与service-vod服务的方法参数一致
@FeignClient(name = "service-vod") //调用的服务名称 @Component public interface VodClient { //定义调用的方法路径 //根据视频id删除阿里云视频 //@PathVariable注解一定要指定参数名称,否则出错 @DeleteMapping("/eduvod/video/removeAlyVideo/{id}") public R removeAlyVideo(@PathVariable("id") String id); }
//注入vodClient @Autowired private VodClient vodClient; //删除小节 //删除小节,删除对应阿里云视频 @DeleteMapping("{id}") public R deleteVideo(@PathVariable String id) { //根据小节id获取视频id,调用方法实现视频删除 EduVideo eduVideo = videoService.getById(id); String videoSourceId = eduVideo.getVideoSourceId(); //判断小节里面是否有视频id if(!StringUtils.isEmpty(videoSourceId)) { //根据视频id,远程调用实现视频删除 R result = vodClient.removeAlyVideo(videoSourceId); if(result.getCode() == 20001) { throw new GuliException(20001,"删除视频失败,熔断器..."); } } //删除小节 videoService.removeById(id); return R.ok(); }
下一篇:rpc和feign的区别