每个人都知道RESTTEMPLATE是基于功能区的负载平衡,那么功能区如何做到?
首先查找spring-cloud-netflix-ribbon-2.1.0.release.jar这个罐子包
检查元I-Inf下的弹簧。
利用Springboot自动配置机制,将自动配置类RibbonAutoconFiguration添加到容器中
`ribbonautoconfiguration位于org.springframework.cloud.netflix.ribbon软件包下
请注意,此@AutoConfigurEatter Note将加载LoadBalanceraUtoconfigution自动配置类,在当前类加载后
跟进LoadBalanceraUuconFiguration自动配置类
来到org.springframework.cloud.client.loadbalancerancer.loadbalancerautoconfiguration
首先,您可以看到成员属性rettemplates类型是列表,它是RESTTEMPLE的集合
头上有一个@autowied和@loadalbalencencate注释。你困惑吗?@autowired何时与@loadalbalencand一起使用?
单击 @loadBalance的注释以查看@qualifier注释突然意识到此步骤是restTempalte对象,该对象在容器中标记为@loadalanced
到静态内部类的内部类中的LoadBaranancerinininicerceptor的RibbonInterceptor方法。
继续看RESTTEMPLATECUSTOMIZER方法
返回值是功能接口
这相当于保存Lombad表达式(匿名实现类),目前尚未执行
然后我们返回上面的代码
查找loadBarancedTemplempleItialDeprected方法
`loadBalancerautoconfiguration.this.resttemplates,这是由@loadBalencenced注释的RESTTEMPLATE对象集合
遍历,遍历和遍历匿名实现类执行自定义RESTTEMPLATECUSTORZER接口的方法。
返回到restTemplecustMosizer方法,以查看该Lombad表达式如何
首先在容器中获取LOADBARANCERINTERPECTOMPECTOR i裂截止器,然后将其添加到RESTTEMPLATE对象中
LoadBalancerInterinterceptor拦截器是完成负载平衡
原始:https://juejin.cn/post/7096101266610192398