目录
配置
我们知道Ribbo有两种结合使用的方式,一种是与RestTemplate结合使用,另外一种是与Feign结合使用,下面是结合RestTemplate的配置。
源码分析
根据自动装配的原理,自动装配了LoadBalancerAutoConfiguration这个类。
看一下这个注解,当我们配置了RestTemplate这个时才会被装配
重要的是LoadBalancerAutoConfiguration向Spring容器注入了这个拦截器
所有的请求都要经过LoadBalancerInterceptor拦截器的intercept方法
最终调用的是LoadBalancerClient的execute方法,使用来自LoadBalancer的ServiceInstance执行指定的请求服务,它的实现类是RibbonLoadBalancerClient。我们看RibbonLoadBalancerClient的execute方法,每次发送请求都回获取一个ILoadBalancer ,会涉及负载均衡(IRULS),服务器列表集群(ServerList) 和检验服务是否存活(IPing)等细节实现
getServer这方法直接调用了ILoadBalancer 的chooseServer方法来使用负载君和策略,从已知的服务列表中选出一个服务器实例
发送请求的是LoadBalancerRequest的apply方法,大概的流程就是这样,忽略很多的细节,实在是一篇文章很难讲清楚
总结
我们通过向Spring注入加上@LoadBalanced注解的RestTemplate就可以实现客户端的负载均衡,最终会通过RibbonLoadBalancerClient.reconstructURI 将构造成正常url形式并发起请求。
欢迎扫描下方二维码关注我!