Ribbon负载均衡

负载均衡流程

image-20240402100452405

RestTamplate被@LoadBalanced标记表明要被Ribbon拦截处理

追踪源码:

与黑马课程的源码有所不同

首先进入LoadBalancerAutoConfigration自动装配类,这里可以发现传了一个final LoadBalancerInterceptor loadBalancerInterceptor的参数,通过List集合加入loadBalanceInterceptor,最终restTemplate设置次拦截器,RetryLoadBancerInterceptor又是什么呢?

image-20240402100549611

我们点LoadBalancerInterceptor进去看一下,可以看到他是实现ClientHttpRequestInterceptor的实现类,而ClientHttpRequestInterceptor是拦截我们http请求的拦截器

image-20240402100609310

我们再回到我们的LoadBalancerInterceptor,我们在这里可以看到它实现了Interptor方法

image-20240402100634374

进入我们所打的断点上

image-20240402100724045

这就说明当我们加了服务发现的注解时,我们会被我们的ribbot服务拦截

image-20240402100755823

以上拦截到了userservice用户服务名

当我们断点到retutrn (ClientHttpResponse)this.loadBalancer.excute(…)时,我们可以发现RibbonBalancer(Ribbon的负载均衡客户端)

image-20240402100846958

!!!

进入excute()方法

image-20240402100919685

在进入RibbonLoadBalancerClient实现类

image-20240402100942051

我们可以发现上Server server = this.getServer(loadBalancer,hint)就是我们实现负载均衡的方法

image-20240402101019188

总结:

image-20240402101045772