如何禁用功能区并在Spring Cloud中使用FeignClient

时间:2018-04-10 12:56:12

标签: spring-cloud spring-cloud-netflix netflix-feign spring-cloud-feign feign

我知道我们可以通过提供url Ex强制FeignClient使用OkHttp而不是Ribbon。 @FeignClient(name="serviceId")

我希望即使只提供名称也可以使用OkHttpClient。防爆。 RGB

根据spring cloud文档“如果启用了功能区,则它是LoadBalancerFeignClient,否则使用默认的假设客户端。”

如何禁用功能区,以便使用默认的假装客户端。

2 个答案:

答案 0 :(得分:0)

我有一个相同的问题,但是我的设置有点不同,在我的情况下(使用带有spring mvc样式注释的spring-cloud-starter-openfeign)我无法正常工作。


仅供参考:我需要一个带有SSLSocketFactory的自定义客户端,最终只为该客户端创建了bean,并将网址保留在@FeignClient

 @Bean
 public Client myClient() {
     return new Client.Default(getSSLSocketFactory(), new NoopHostnameVerifier());
 }

但是,我们确实有一些使用spring-cloud-starter-feign的项目,其中注释中未提供URL。不知道下面的配置是否完整(我没有设置),但这可能会为您指明正确的方向...

依赖项

compile("org.springframework.cloud:spring-cloud-starter-feign") {
    exclude group: 'org.springframework.cloud', module: 'spring-cloud-starter-ribbon'
    exclude group: 'org.springframework.cloud', module: 'spring-cloud-starter-archaius'
}

配置

@Configuration
@Import(FeignClientsConfiguration.class) // org.springframework.cloud.netflix.feign.FeignClientsConfiguration
public class MyConfig {

    @Value("${client.url}")
    private String url;    

    @Bean
    public MyClient myClient(final Decoder decoder, final Encoder encoder, final Client client) {
        return Feign.builder().client(client)
            .encoder(encoder)
            .decoder(decoder)
            .target(MyClient.class, url);
    }
}

答案 1 :(得分:0)

与功能区无关。

检查:

feign:
  httpclient:
    enabled: false

这将禁用Spring Cloud自动配置的httpclient,并将在上下文中搜索名为@Bean的{​​{1}}。因此,只需在httpClient类中提供@Bean的定义即可。

在春季云假装中检查课程@Configuration

https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-feign.html