什么是 OpenFeign
前面无论是基本调用,还是 Hystrix ,我们实际上都是通过手动调用 RestTemplate 来实现远程调用。
使用 RestTemplate 存在一个问题:繁琐,每一个请求,参数不同,请求地址不同,返回数据类型不同,其他都是一样的,所以我们希望能够对请求进行简化。
简化方案就是 OpenFeign。
Spring Cloud OpenFeign,提供 OpenFeign 集成到 Spring Boot 应用中的方式,主要解决微服务之间的调用问题。
OpenFeign 源于 Netflix Feign , 但是 Netflix 中的组件已经停止开源工作,OpenFeign 是 Spring Cloud 团队在 Netflix Feign 的基础上开发出来的声明式服务调用组件。
一个 Hello 示例
继续使用之前的 provider。
新建一个 Spring Boot 模块,创建时,选择 OpenFeign 依赖,如下:
项目创建成功后,在 application.properties 中进行配置,将其注册到eureka 中:
spring.application.name=openfeign
server.port=4000
eureka.client.service-url.defaultZone = http://localhost:1111/eureka
接下来 ,在启动类上添加注解,开启 Feign 的支持:
@SpringBootApplication
@EnableFeignClients
public class OpenfeignApplication {
public static void main(String[] args) {
SpringApplication.run(OpenfeignApplication.class, args);
}
}
接下来,定义 HelloService 接口,去使用 OpenFeign:
@FeignClient("provider") // 调用的服务名
public interface HelloService {
@GetMapping("/hello")
String hello(); // 这里的方法名随意取
}
最后调用 HelloController ,对 HelloService 进行测试:
@RestController
public class HelloController {
@Autowired
HelloService helloService;
@GetMapping("/hello")
public String hello(){
return helloService.hello();
}
}
先启动注册中心 eureka
再启动 provider
最后启动 openfeign
打开 eureka 的后台 http://localhost:1111/
:
可以看到,openfeign 和 provider 都注册到 eureka 上了。
再访问 http://localhost:4000/hello
, 效果如下:
ok!
每天学习一点点,每天进步一点点。