有时候有可能基于注解和配置属性的方法(参考"Spring Cloud 声明式REST客户端 OpenFeign – 2. 覆盖Feign缺省值")没法满足我们的定制需求。这种情况下,我们可以使用Feign Builder API创建feign客户端。下面的例子中,我们创建了两个feign客户端,使用同一个接口,但是每个feign客户端使用一个不同的request interceptor。
@Import(FeignClientsConfiguration.class)
class FooController {
private FooClient fooClient;
private FooClient adminClient;
@Autowired
public FooController(Decoder decoder, Encoder encoder, Client client, Contract contract) {
this.fooClient = Feign.builder().client(client)
.encoder(encoder)
.decoder(decoder)
.contract(contract)
.requestInterceptor(new BasicAuthRequestInterceptor("user", "user"))
.target(FooClient.class, "http://PROD-SVC");
this.adminClient = Feign.builder().client(client)
.encoder(encoder)
.decoder(decoder)
.contract(contract)
.requestInterceptor(new BasicAuthRequestInterceptor("admin", "admin"))
.target(FooClient.class, "http://PROD-SVC");
}
}
注意,上面例子中:
FeignClientsConfiguration.class是Spring Cloud Netflix提供的缺省配置;PROD-SVC是feign客户端要请求的目标服务的服务名称;Feign Contract对象定义了接口上使用那些注解和值,自动装配的Contractbean支持的是Spring MVC注解而不是Feign缺省的原生注解。
本文介绍如何使用FeignBuilderAPI创建定制化的Feign客户端,通过不同requestinterceptor实现特定需求,如基本认证。
1939





