SpringCloud复习:(2)@LoadBalanced注解的工作原理

@LoadBalanced注解标记了一个RestTemplate或WebClient bean使用LoadBalancerClient来进行负载均衡。

LoadBalancerAutoConfiguration类给带注解的@RestTemplate添加了拦截器:LoadBalancerInterceptor.
具体流程如下:
首先定义一个LoadBalancerInterceptor
SpringCloud复习:(2)@LoadBalanced注解的工作原理_第1张图片
然后定义了一个RestTemplateCustomizer bean,这个bean 通过customize方法将传入的RestTemplate添加上边定义的LoadBalancerInterceptor,最后再定义一个SmartInitializingSingleton bean,容器创建时,会调用其afterSingletonsInstantiated方法,在这个方法里传入使用了@LoadBalanced注解标记的RestTemplate,然后调用上一步中的RestTemplateCustomizer的customize方法来给RestTemplate添加Interceptor.
SpringCloud复习:(2)@LoadBalanced注解的工作原理_第2张图片

总结: 通过@LoadBalanced注解,来判断哪些RestTemplate需要负载均衡功能。通过给RestTemplate添加拦截器来具体实现负载功能。

可以在方法中注入LoadBalancerClient,然后调用choose方法,来获取ServiceInstance对象,以进一步获取某个服务的信息,比如主机名、端口号等。
SpringCloud复习:(2)@LoadBalanced注解的工作原理_第3张图片

你可能感兴趣的:(SpringCloud,1024程序员节)