From cc24d00fdeadec2bcd3348a4b42576081cbccf82 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Wed, 19 Oct 2016 20:06:52 -0400 Subject: [PATCH 1/3] Fixes #1211 --- .../main/asciidoc/spring-cloud-netflix.adoc | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/docs/src/main/asciidoc/spring-cloud-netflix.adoc b/docs/src/main/asciidoc/spring-cloud-netflix.adoc index bd65af99..14663a1c 100644 --- a/docs/src/main/asciidoc/spring-cloud-netflix.adoc +++ b/docs/src/main/asciidoc/spring-cloud-netflix.adoc @@ -970,6 +970,46 @@ This replaces the `SpringMvcContract` with `feign.Contract.Default` and adds a ` Default configurations can be specified in the `@EnableFeignClients` attribute `defaultConfiguration` in a similar manner as described above. The difference is that this configuration will apply to _all_ feign clients. +=== Creating Feign Clients Manually + +In some cases it might be necessary to customize your Feign Clients in a way that is not +possible using the methods above. In this case you can create Clients using the +https://github.com/OpenFeign/feign/#basics[Feign Builder API]. Below is an example +which creates two Feign Clients with the same interface but configures each one with +a separate request interceptor. + +[source,java,indent=0] +---- +@Import(FeignClientsConfiguration.class) +class FooController { + + private FooClient fooClient; + + private FooClient adminClient; + + @Autowired + public FooController( + ResponseEntityDecoder decoder, SpringEncoder encoder, EurekaClient discoveryClient) { + InstanceInfo prodSvcInfo = discoveryClient.getNextServerFromEureka("PROD-SVC", false); + this.fooClient = Feign.builder() + .encoder(encoder) + .decoder(decoder) + .requestInterceptor(new BasicAuthRequestInterceptor("user", "user")) + .target(FooClient.class, prodSvcInfo.getHomePageUrl()); + this.adminClient = Feign.builder() + .encoder(encoder) + .decoder(decoder) + .requestInterceptor(new BasicAuthRequestInterceptor("admin", "admin")) + .target(FooClient.class, prodSvcInfo.getHomePageUrl()); + } +} +---- + +NOTE: In the above example `FeignClientsConfiguration.class` is the default configuration +provided by Spring Cloud Netflix. + +NOTE: `prodSvcInfo` is the service the the Clients will be making requests to. + [[spring-cloud-feign-hystrix]] === Feign Hystrix Support From 2c8bac56661f4d976519fb8f9032b4f2a5cbf5b4 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Thu, 20 Oct 2016 13:31:41 -0400 Subject: [PATCH 2/3] Use client interface instead of Eureka directly --- .../main/asciidoc/spring-cloud-netflix.adoc | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/docs/src/main/asciidoc/spring-cloud-netflix.adoc b/docs/src/main/asciidoc/spring-cloud-netflix.adoc index 14663a1c..f99a3f93 100644 --- a/docs/src/main/asciidoc/spring-cloud-netflix.adoc +++ b/docs/src/main/asciidoc/spring-cloud-netflix.adoc @@ -989,18 +989,17 @@ class FooController { @Autowired public FooController( - ResponseEntityDecoder decoder, SpringEncoder encoder, EurekaClient discoveryClient) { - InstanceInfo prodSvcInfo = discoveryClient.getNextServerFromEureka("PROD-SVC", false); - this.fooClient = Feign.builder() + ResponseEntityDecoder decoder, SpringEncoder encoder, Client client) { + this.fooClient = Feign.builder().client(client) .encoder(encoder) - .decoder(decoder) - .requestInterceptor(new BasicAuthRequestInterceptor("user", "user")) - .target(FooClient.class, prodSvcInfo.getHomePageUrl()); - this.adminClient = Feign.builder() + .decoder(decoder) + .requestInterceptor(new BasicAuthRequestInterceptor("user", "user")) + .target(FooClient.class, "http://PROD-SVC"); + this.adminClient = Feign.builder().client(client) .encoder(encoder) - .decoder(decoder) - .requestInterceptor(new BasicAuthRequestInterceptor("admin", "admin")) - .target(FooClient.class, prodSvcInfo.getHomePageUrl()); + .decoder(decoder) + .requestInterceptor(new BasicAuthRequestInterceptor("admin", "admin")) + .target(FooClient.class, "http://PROD-SVC"); } } ---- From b16a95d0f2518bae5a608b0cbd05b56655f26aa9 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Thu, 20 Oct 2016 13:40:59 -0400 Subject: [PATCH 3/3] Fixed typo --- docs/src/main/asciidoc/spring-cloud-netflix.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/main/asciidoc/spring-cloud-netflix.adoc b/docs/src/main/asciidoc/spring-cloud-netflix.adoc index f99a3f93..65052fe6 100644 --- a/docs/src/main/asciidoc/spring-cloud-netflix.adoc +++ b/docs/src/main/asciidoc/spring-cloud-netflix.adoc @@ -1007,7 +1007,7 @@ class FooController { NOTE: In the above example `FeignClientsConfiguration.class` is the default configuration provided by Spring Cloud Netflix. -NOTE: `prodSvcInfo` is the service the the Clients will be making requests to. +NOTE: `PROD-SVC` is the name of the service the Clients will be making requests to. [[spring-cloud-feign-hystrix]] === Feign Hystrix Support