Spring Cloud: How to use Feign without Ribbon

与世无争的帅哥 提交于 2021-02-05 20:21:24

问题


I would like to use Feign without client-side loadbalancer Ribbon because I don't want to run Eureka, which would need to be distributed and highly available. Instead internal ELBs with internal DNS names managed by Route53 will do just fine.

Providing plain URLs to @FeignClient always results in no loadbalancer found for .., so I tried preventing Feign from using Ribbon:

Spring Cloud Netflix comes with FeignRibbonClient, which is used if ILoadBalancer from ribbon-loadbalancer is present. However, if this dependency is excluded FeignConfiguration is broken:

Bean creation exception on FactoryBean type check: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'apiVersionClient': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: feign.codec.Decoder org.springframework.cloud.netflix.feign.FeignConfiguration.decoder; nested exception is java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy

Ideas welcome :-)


回答1:


If you want to use a plain URL use:

@FeignClient(value = "http://example.com", loadbalance = false)

With the Brixton release train you would use:

@FeignClient(url = "http://example.com", name = "example")



回答2:


Somewhat late, but after looking into this if you provide your own Client Bean the LoadBalancerFeignClient wont get built and used, and the Feign open tracing autoconfig will still work.

@Bean
public Client feignClient() {
    return new Client.Default(null, null);
}


来源:https://stackoverflow.com/questions/27620338/spring-cloud-how-to-use-feign-without-ribbon

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!