关联阅读(必读)
发送http请求(2):RestTemplate发送http请求
SpringCloud源码阅读4:Ribbon客户端负载均衡(下)
回顾
当我在Ribbon的环境下使用RestTemplate发送请求时,通常我们会像下面这样注入一个restTemplate
@Autowired
@LoadBalanced
RestTemplate restTemplate;
为啥我们注入一个带有注解@LoadBalanced标注RestTemplate,此RestTemplate就具有负载均衡的能力,原理是什么呢?
在RestTemplate发送http请求一节讲过,RestTemplate可以添加拦截器,在发送请求前,先执行拦截器内容。
在Ribbon负载均衡(下)一节讲过,(LoadBalancerClient)RibbonLoadBalancerClient 具有负载均衡的能力。
猜测@LoadBalanced注解应该就是把这两点结合在了一起。
LoadBalancerAutoConfiguration配置类
这个整合剂,就是LoadBalancerAutoConfiguration配置类,
@Configuration
@ConditionalOnClass(RestTemplate.class)
@ConditionalOnBean(LoadBalancerClient.class)
@EnableConfigurationProperties(LoadBalancerRetryProperties.class)
public class LoadBalancerAutoConfiguration {
//注入所有使用@LoadBalanced的RestTemplate
@LoadBalanced
@Autowired(required = false)
private List<RestTemplate> restTemplates = Collections.emptyList();
// 对所有的RestTemplate使用RestTemplateCustomizer定制器进行统一处理
@Bean
public SmartInitializingSingleton loadBalancedRestTemplateInitializerDeprecated(
final ObjectProvider<List<RestTemplateCustomizer>> restTemplateCustomizers) {
return () -> restTemplateCustomizers.ifAvailable(customizers -> {
for (RestTemplate restTemplate : LoadBalancerAutoConfiguration.this.restTemplates) {
for (RestTemplateCustomizer customizer : customizers) {
customizer.customize(restTemplate);
}
}
});
}
@A