SpringCloud声明式服务调用Feign
前言
Feign除了提供Hystrix和Ribbon两者的功能之外,还提供了一种声明式的web服务端定义方式。
依赖
//注意是openfeign
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
springcloud Feign是一个工具,它不仅整合了ribbon和hystrix两个强大功能,还提供了一种声明式的web服务端定义方式。查看该依赖包,默认引入了Ribbon和Hystrix,即负载均衡和熔断器的依赖。
Feign提供了可插拔的注解支持,只需给接口添加注解配置,即可完成对服务提供方的接口绑定。
- 通过在程序启动类上添加
@EnableFeignClients
注解开启Feign 客户端的功能。 - 接口上添加
@FeignClient
注解,来声明一个Feign 客户端,添加@EnableFeignClients注解会自动扫描添加了@FeignClient注解的接口 - @FeignClient(value=“my-service”,configuration=FeingConfig.class),原有的serviceId属性已废弃,可以用name或value来替代;
value为远程调用其他服务的服务名
在Feign中,Client是非常重要的组件,默认情况下,Client是由HttpURLConnection来实现网络请求的,同时Client也支持HttpClient和OkHttp来进行网络请求。
//在UserServiceFeign接口内部,有个sayHello的方法,该方法通过Feign来调用my-service服务的/demo/hello接口
@FeignClient(value = “my-service”,configuration = FeignConfig.class, path=”/demo”)
public interface UserServiceFeign{@GetMapping(value="/hello")
String sayHello(@RequestParam(value="name")String name);
}
Feign的客户端负载均衡是通过Ribbon实现的,在定义Feign客户端时,使用了@FeignClient注解,初始化过程中,Feign会根据注解的name或value属性指定的服务名,自动创建一个同名的Ribbon客户端。
HttpClient和OkHttp
工程中改变依赖可以改变网络请求框架:
<dependency>
<groupId>com.netflix.feign</groupId>
<artifactId>feign-httpclient</artifactId>
<version>RELEASE</version>
</dependency>
或
<dependency>
<groupId>com.netflix.feign</groupId>
<artifactId>feign-okhttp</artifactId>
<version>RELEASE</version>
</dependency>
Ribbon配置
Feign默认已经对Ribbon客户端负载均衡做了支持。
Feign默认实现了请求的重试机制。
Feign的超时时间是指Ribbon配置的超时时间。需要注意一点,Feign的超时与Hystrix的超时是两个概念,熔断是根据这两个时间设置的最小时间来熔断的。
请求处理的超时时间
ribbon:
ReadTimeout: 10000
ConnectTimeout: 10000
Hystrix配置
默认情况下,Feign会将所有Feign客户端的方法都封装到Hystrix命令中进行服务保护。
设置全局的超时时间,首先需要保证feign.hystrix.enabled=true
feign:
hystrix:
enabled: true
hystrix:
command:
default:
execution:
isolation:
strategy: SEMAPHORE
thread:
timeoutInMilliseconds: 15000
服务降级配置
- 1、为HelloService实现一个服务降级类HelloServiceFallback
- 2、在服务绑定接口中,通过@FeignClient注解的fallback属性来指定对应的服务降级实现类
还没有评论,来说两句吧...