web-dev-qa-db-ja.com

Spring Cloud:リボンなしでFeignを使用する方法

分散して高可用性が必要なEurekaを実行したくないので、クライアント側のロードバランサーリボンなしでFeignを使用したいと思います。代わりに、Route53によって管理される内部DNS名を持つ内部ELBは問題なく機能します。

@FeignClientへのプレーンURLを提供すると常にno loadbalancer found for ..になるため、Feignがリボンを使用しないようにしました。

Spring CloudNetflixにはFeignRibbonClientが付属しています。これは、ribbon-loadbalancerILoadBalancerが存在する場合に使用されます。ただし、この依存関係が除外されている場合、FeignConfigurationは壊れます。

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

アイデアは大歓迎です:-)

16
Konrad Hosemann

プレーンURLを使用する場合は、@FeignClient(value="http://example.com", loadbalance=false)を使用します

Brixtonリリーストレインでは、@FeignClient(url="http://example.com", name="example")を使用します

17
spencergibb

少し遅れますが、これを調べた後、独自のクライアントBeanを提供した場合、LoadBalancerFeignClientは構築および使用されず、Feignオープントレースautoconfigは引き続き機能します。

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