Spring Cloud 声明式REST客户端 OpenFeign -- 3. 手工创建Feign客户端

有时候有可能基于注解和配置属性的方法(参考"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");
    }
}

注意,上面例子中:

  1. FeignClientsConfiguration.classSpring Cloud Netflix提供的缺省配置;
  2. PROD-SVCfeign客户端要请求的目标服务的服务名称;
  3. Feign Contract对象定义了接口上使用那些注解和值,自动装配的Contract bean支持的是Spring MVC注解而不是Feign缺省的原生注解。

你可能感兴趣的:(Spring,cloud)