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

本文介绍了SpringCloud中@LoadBalanced注解如何赋予RestTemplate负载均衡的能力。通过分析LoadBalancerAutoConfiguration配置类、LoadBalancerInterceptor、RestTemplateCustomizer和SmartInitializingSingleton,揭示了当RestTemplate注入@LoadBalanced后,如何在请求前进行负载均衡选择服务地址,并在实际请求中应用。文章最后进行了总结,并推荐了相关阅读材料。
摘要由CSDN通过智能技术生成

关联阅读(必读)

发送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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值