Declarative REST Client: Feign
基本使用
- 启动类添加@EnableFeignClients注解开启扫描Spring Cloud Feign客户端的功能
- 创建一个Feign的客户端接口定义。使用@FeignClient注解中的value或name属性来指定这个接口所要调用的服务名称(serviceId属性过时)
- 接口中定义的各个函数使用SpringMVC的注解就可以来绑定服务提供方的REST接口
1 | @FeignClient("stores") |
- 以上Feign会通过Ribbon使用stores作为client name去创建一个Load Balancer负载均衡调用,它会去发现“store”服务的物理地址,如果结合eureka,它将会从注册中心自动获取,否则你要指定一个servers列表。
- 除了指定服务名外,还可指定@FeignClient的url属性,可以是绝对的或hostname, e.g. http://localhost:5001/或域名
- 在application context中,这个bean的名称中一个接口的全限定名。也能使用qualifier属性去指定你自己的别名。
- Feign默认使用了Ribbon进行客户端侧负载均衡
- 另外,Feign还整合的Hystrix来实现服务的容错保护,在Dalston版本中,Feign的Hystrix默认是关闭的,需添加hystrix-starter到classpath,并设置feign.hystrix.enabled=true
- 如果你需要使用ThreadLoca在你的RequestInterceptor中绑定变量,你需要设置hystrix的线程隔离策略为信号量,或失效在feign中的Hystrix
1 | # To disable Hystrix in Feign |
自定义FeiginClient配置
- 类似于RibbonClient的自定义配置,默认配置类FeignClientsConfiguration
- 支持对单个服务指定@Configuration配置类为@FeignClient的属性configuration
- 支持对所有服务的默认配置自定义,使用@EnableFeignClients的属性defaultConfiguration
- 支持使用属性文件自定义
1 | 对名为feignName的Feign Client的自定义配置 |
结合Hystrix
- 开启全局feign.hystrix.enabled=true
- 在Dalston版本中,Feign的Hystrix默认是关闭的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
191. 定义fallback类,实现feignClient的接口
@Component //记得加该注解
public class HystrixClientFallback implements DcClient {
@Override
public String consumer() {
return "default-provider";
}
}
2. @FeignClient中fallback属性设置1中定义的类
@FeignClient(name = "eureka-client-provider", fallback = HystrixClientFallback.class)
public interface DcClient {
@GetMapping("/dc")
String consumer();
}使用fallbackFactory属性打印fallback异常
- fallback和fallbackFactory不能同时配置使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
181. 定义fallbackFactory类,该类实现FallbakFactory<DcClient>接口,范型为FeignClient接口名
@Component
public class HystrixClientFallbackFactory implements FallbackFactory<DcClient> {
@Override
public DcClient create(Throwable throwable) {
return new DcClient() {
@Override
public String consumer() {
return "fallback cause: == " + throwable.getMessage();
}
};
}
}
2.
@FeignClient(name = "eureka-client-provider", fallbackFactory = HystrixClientFallbackFactory.class)禁用单个FeignClient的Hystrix支持
- 自定义@FeignClient的配置,默认Feign.Builder 为 HystrixFeign.Builder
- 为@FeignClient的configuration属性,指定FooConfiguration
- 使用Feign.builder替代默认的HystrixFeign.Builder
1
2
3
4
5
6
7
8@Configuration
public class FooConfiguration {
@Bean
@Scope("prototype")
public Feign.Builder feignBuilder() {
return Feign.builder();
}
}访问设置基础认证的API
- 如访问认证的eureka信息,需自定义FeignClient配置
1 | 1. 自定义配置认证用户名和密码 |
Feign日志级别
- 对每一个Feign client创建一个Logger。
- 默认logger的名称是feign接口的全类名。
- Feign日志记录只响应DEBUG级别,配置级别
- 以下四个类型是告诉feign怎样记录哪些日志信息。
- None : no logging 默认
- Basic: 仅记录请求方法和url和响应状态码和执行时间
- Headers: 记录基础信息外,附加请求和响应头
- full: 记录请求和响应的头,体,元数据
- 如下,设置Logger.Level为full
1
2
3
4
5
6
7
8
9
10
11
12
13
141. 设置日志级别,目前只响应debug级别
logging.level.com.fuyi.feign.DcClient: DEBUG
2. 自定义配置显示哪些信息,默认NONE,都不显示
配置给@FeignClient的configuration属性
@Configuration
public class FooConfiguration {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}