Ribbon源码解析

我们只需要在RestTemplate的bean上面加入@LoadBalanced注解即可在使用RestTemplate发送HTTP请求时,自动实现负载均衡调用。

@Bean
@LoadBalanced
public RestTemplate restTemplate(){
    return new RestTemplate();
}

看起来挺神奇中,本节我们就讲一讲这背后发生了什么。

我们最能想到的就是@LoadBalanced这个注解起了作用, @LoadBalanced源码如下:

@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Qualifier
public @interface LoadBalanced {
}

仔细看来没有什么特别之处,也没有像往常的注解引入其他类。按照常规惯例,我们就到引入的jar包下看下META-INF/spring.factories文件有没有引入什么特别的类。我们就到@LoadBalanced所在的jar包spring-cloud-commons-1.2.2.RELEASE-sources.jar来看下其spring.factories文件:

# AutoConfiguration
org.springframework.boot.autoconfigure.EnableAutoConfiguration=
org.springframework.cloud.client.CommonsClientAutoConfiguration,
org.springframework.cloud.client.discovery.noop.NoopDiscoveryClientAutoConfiguration,
org.springframework.cloud.client.hypermedia.CloudHypermediaAutoConfiguration,
org.springframework.cloud.client.loadbalancer.AsyncLoadBalancerAutoConfiguration,
org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration,
org.springframework.cloud.client.serviceregistry.ServiceRegistryAutoConfiguration,
org.springframework.cloud.commons.util.UtilAutoConfiguration,
org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration
 
 
# Environment Post Processors
org.springframework.boot.env.EnvironmentPostProcessor=
org.springframework.cloud.client.HostInfoEnvironmentPostProcessor

AutoConfiguration引入的类都会在项目启动时被添加到Spring容器中,与LoadBalanced相关的的有两个,直觉上LoadBalancerAutoConfiguration更像我们需要看的类。

原文地址:https://www.cnblogs.com/myitnews/p/12498479.html