@LoadBalanced注解的RestTemplate拥有负载均衡的能力

关联阅读(必读)

发送http请求(1):发送http请求的几种方式

发送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

你可能感兴趣的:(java基础,springcloud)