主要还是通过以下三个链接了解了负载均衡的源码,自我总结如下:
客户端负载均衡
LoadBalancerAutoConfiguration类里使用RestTemplateCustomizer对所有标注了@LoadBalancer的RestTemplate Bean添加了一个LoadBalancerInterceptor拦截器。
LoadBalancerInterceptor会去RestTemplate的请求进行拦截,然后从eureka中获取服务id与端口号,随后利用负载均衡算法得到真实的服务地址信息,替换服务id。
LoadBalancerClient的execute()方法