Spring Cloud: How to use Feign without Ribbon

19,716

Solution 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")

Solution 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);
}
Share:
19,716

Related videos on Youtube

Konrad Hosemann
Author by

Konrad Hosemann

Updated on June 04, 2022

Comments

  • Konrad Hosemann
    Konrad Hosemann almost 2 years

    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 :-)

  • Dave Syer
    Dave Syer over 9 years
    Where does the URL go then?
  • spencergibb
    spencergibb over 9 years
    Updated answer, it goes in value
  • demaniak
    demaniak almost 8 years
    @spencergibb loadbalance does not seem to be available in @FeignClient any more (Spring Boot 1.3.5, Brixton SR1 release). Any alternatives?
  • spencergibb
    spencergibb almost 8 years
    @demaniak If you don't want to loadbalance you use @FeignClient(url="http://example.com", name="example")
  • demaniak
    demaniak almost 8 years
    Thanks @spencergibb. I also figured out I can disable ribbon with ribbon.eureka.enabled=false
  • spencergibb
    spencergibb almost 8 years
    if eureka isn't on the classpath, that would disable it as well.
  • Maxi Wu
    Maxi Wu almost 5 years
    Greenwich release don't have attribute 'loadbalance'?
  • Pepria
    Pepria about 4 years
    @spencergibb How do I disable the ribbon loadbalancer if I am building the url dynamically and passing URI object to feign client method call? I don't want to include the url attribute in the @FeignClient ? More details at stackoverflow.com/questions/61001300/…