测试项目所用包spring-cloud-commons:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O71V3reP-1664418259269)(C:/Users/xwy/AppData/Roaming/Typora/typora-user-images/image-20220928155139897.png#pic_center)]](https://1000bd.com/contentImg/2024/09/11/f83474c8e71ab698.png)
@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Qualifier
public @interface LoadBalanced {
}
在使用微服务框架时,通过ribbon实现多服务之间的负载均衡,需要对RestTemplatebean对象加上@LoadBalanced注解即可,如下:
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
查找该注解的使用类,可以看到有2个
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g3iYML4L-1664418206065)(C:\Users\xwy\AppData\Roaming\Typora\typora-user-images\image-20220928155315791.png)]](https://1000bd.com/contentImg/2024/09/11/75a64b4db78e46e9.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DxF4ZtcK-1664418206068)(C:\Users\xwy\AppData\Roaming\Typora\typora-user-images\image-20220928160147389.png)]](https://1000bd.com/contentImg/2024/09/11/fce8741ca8482bac.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wrejcMj0-1664418206069)(C:\Users\xwy\AppData\Roaming\Typora\typora-user-images\image-20220928160134046.png)]](https://1000bd.com/contentImg/2024/09/11/e2dc38074a09bc1a.png)
可以看到,这2个负载均衡自动配置类有个明显的注解差别,配置类2的注解中多了一个@ConditionalOnClass(RestTemplate.class),该注解的意思是:当项目中有RestTemplate.class类时,该配置类才会生效!
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DbWlZSOu-1664418206071)(C:\Users\xwy\AppData\Roaming\Typora\typora-user-images\image-20220929094121509.png)]](https://1000bd.com/contentImg/2024/09/11/1c29c5c91c6645ad.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wK4iRQ5O-1664418206072)(C:\Users\xwy\AppData\Roaming\Typora\typora-user-images\image-20220929101509015.png)]](https://1000bd.com/contentImg/2024/09/11/1fbfba77ca04596b.png)
标记1处,注入有@LoadBalanced注解的RestTemplatebean对象;
标记2处,给RestTemplate注入拦截器loadBalancerInterceptor;
标记4处,注入负载均衡实例。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P3PytIzv-1664418206074)(C:\Users\xwy\AppData\Roaming\Typora\typora-user-images\image-20220929100326619.png)]](https://1000bd.com/contentImg/2024/09/11/c937d1f1e45135eb.png)
标记3处,执行负载均衡对象请求服务实例的动作。
Debug模式看看上述标记4处该负载均衡对象是哪个实例,如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kn6qIc0i-1664418206075)(C:\Users\xwy\AppData\Roaming\Typora\typora-user-images\image-20220929101344952.png)]](https://1000bd.com/contentImg/2024/09/11/69cedebf6a938362.png)
可以看的是由Ribbon实现的负载均衡。
Ribbon做负载均衡,代码配置RestTemplate,并加上@LoadBalanced注解@LoadBalanced注解的RestTemplatebean对象被注入到LoadBalancerAutoConfiguration类管理LoadBalancerAutoConfiguration类给RestTemplate对象添加默认拦截器loadBalancerInterceptorloadBalancerInterceptor用注入的Ribbon负载均衡客户端实例实现负载均衡