Fegin 单客户端配置类方式设置配置
个人所知的这种方式可以配置的属性为:
encoder
,decoder
,Contract
,Logger
,Retryer
,ErrorDecoder
,Request.Options
,RequestInterceptor
官方文档
其中重点是:
@FeignClient(name = "stores", configuration = FooConfiguration.class)
,也可以使用增加方式:
FooConfiguration
只配置需要的配置@FeignClient(value = "stores", configuration = {FooConfiguration.class,DefaultEncoder.class, DefaultDecoder.class})
并且
FooConfiguration
配置类上, 无需标明@Configuration
, 标明后就是全局配置了!
个人例子, 设置单个客户端读取超时
fegin
接口
@FeignClient(value = "account-service-api", url = "${account-service.url}", path = "/accountActiveInfo",
configuration = AccountFeignRequest.class) // 使用自定义组合配置类
public interface AccountActiveInfoApi {
/**
* 查询不活跃用户
*
* @param accountQueryRqt
* @author: ZhiHao
* @date: 2022/5/25
*/
@PostMapping("/inactiveQuery")
AccountActiveInfoRsp<AccountRsp> inactiveQuery(@RequestBody InactiveQueryRqt accountQueryRqt);
}
AccountFeignRequest 配置类
注意无需配置
@Configuration
注解, 配置后是会到 父Bean工厂上下文中
public class AccountFeignRequest {
@Bean
public Request.Options feignRequestOptions() {
return new Request.Options(10000,333*1000);
}
@Bean
public Encoder defaultEncoder() {
return new DefaultEncoder();
}
@Bean
public Decoder defaultDecoder() {
return new DefaultDecoder();
}
@Bean
public ErrorDecoder defaultErrorDecode() {
return new DefaultErrorDecode();
}
}
结果:
扩展:
配置隔离实现原理:
NamedContextFactory (比较好的说明1、说明2)
不同微服务的客户端有不同的以及相同的配置,有不同的 Bean,也有相同的 Bean。所以,我们可以针对每一个微服务将他们的 Bean 所处于 ApplicationContext 独立开来,不同微服务客户端使用不同的 ApplicationContext。NamedContextFactory 就是用来实现这种机制的
1