装配LoadBalancerFeignClient负载均衡容器实例
=================================
详细来看,Feign涉及的与Client相关的两个自动配置类具体如下:
(1)
org.springframework.cloud.openfeign.ribbon.FeignRibbonClientAutoConfiguration:此自动配置类能够配置具有负载均衡能力的FeignClient容器实例。
(2)
org.springframework.cloud.openfeign.FeignAutoConfiguration:此自动配置类只能配置原始的FeignClient客户端容器实例。
事实上,第一个自动配置类
FeignRibbonClientAutoConfiguration在容器的装配次序上优先于第二个自动配置类FeignAutoConfiguration。
为了达到高可用,Spring Cloud中一个微服务提供者至少应该部署两个以上节点,从这个角度来说,LoadBalancerFeignClient容器实例已经成为事实上的标配。
具体可以参见
FeignRibbonClientAutoConfiguration源码,节选如下:
import com.netflix.loadbalancer.ILoadBalancer;
…
@ConditionalOnClass({ILoadBalancer.class, Feign.class})
@Configuration
@AutoConfigureBefore({FeignAutoConfiguration.class}) //本配置类具备优先权
@EnableConfigurationProperties({FeignHttpClientProperties.class})
@Import({
HttpClientFeignLoadBalancedConfiguration.class,//配置:包装ApacheHttpClient实例的负载均衡客户端
OkHttpFeignLoadBalancedConfiguration.class, //配置:包装OkHttpClient实例的负载均衡客户端
DefaultFeignLoadBalancedConfiguration.class //配置:包装Client.Default实例的负载均衡客户端
})
public class FeignRibbonClientAutoConfiguration {
//空的构造器
public FeignRibbonClientAutoConfiguration() {
}
…
}
从源码中可以看到,
FeignRibbonClientAutoConfigurat