SpringCloud之远程调用OpenFeign和Ribbon
Ribbon、Feign和OpenFeign的区别
SpringCloudAlibaba微服务实战教程系列
Spring Cloud 微服务架构学习记录与示例
一 简介
Feign是Netflflix开发的⼀个轻量级RESTful的HTTP服务客户端(⽤它来发起请求,远程调⽤的),是以Java接⼝注解的⽅式调⽤Http请求,⽽不⽤像Java中通过封装HTTP请求报⽂的⽅式直接调⽤,Feign被⼴泛应⽤在Spring Cloud 的解决⽅案中。类似于Dubbo,服务消费者拿到服务提供者的接⼝,然后像调⽤本地接⼝⽅法⼀样去调⽤,实际发出的是远程的请求。
- Feign可帮助我们更加便捷,优雅的调⽤HTTP API:不需要我们去拼接url然后呢调⽤restTemplate的api,在SpringCloud中,使⽤Feign⾮常简单,创建⼀个接⼝(在消费者--服务调⽤⽅这⼀端),并在接⼝上添加⼀些注解,代码就完成了
- SpringCloud对Feign进⾏了增强,使Feign⽀持了SpringMVC注解(OpenFeign)
本质:封装了Http调⽤流程,更符合⾯向接⼝化的编程习惯,类似于Dubbo的服务调⽤
Dubbo的调⽤⽅式其实就是很好的⾯向接⼝编程
二、配置应用
(效果)Feign = RestTemplate+Ribbon+Hystrix
1、引入pom
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
2、服务消费者⼯程启动类使⽤注解@EnableFeignClients添加Feign⽀持
@SpringBootApplication @EnableDiscoveryClient // 开启服务发现 @EnableFeignClients // 开启Feign public class AutodeliverFeignApplication8092 { public static void main(String[] args) { SpringApplication.run(AutodeliverFeignApplication8092.class,args); } }
注意:此时去掉Hystrix熔断的⽀持注解@EnableCircuitBreaker即可包括引⼊的依赖,因为Feign会⾃动引⼊
3、创建Feign接⼝
// name:调⽤的服务名称,和服务提供者yml⽂件中spring.application.name保持⼀致,可以使用url形式,则为直接调取,不走注册中心 @FeignClient(name="city-service-resume") public interface CityFeignClient { //调⽤的请求路径 @RequestMapping(value = "/city/openstate/{userId}",method=RequestMethod.GET) public Integer findOpenState(@PathVariable(value = "userId")Long userId); }
注意:
1)@FeignClient注解的name属性⽤于指定要调⽤的服务提供者名称,和服务提供者yml⽂件中spring.application.name保持⼀致
2)接⼝中的接⼝⽅法,就好⽐是远程服务提供者Controller中的Hander⽅法(只不过如同本地调⽤了),那么在进⾏参数绑定的时,可以使⽤@PathVariable、@RequestParam、@RequestHeader等,这也是OpenFeign对SpringMVC注解的⽀持,但是需要注意value必须设置,否则会抛出异常
4、调用
@Autowired private CityFeignClient cityFeignClient;
在服务端按照方法的调用即可。
https://www.jianshu.com/p/8bca50cb11d8