我们来看一下Demo:

RestTemplate的处理逻辑
从代码也可以看出,拉取服务的入口就是RestTemplate的getForObject方法,先看看RestTemplate里面的调用链:

可以看到,RestTemplate会将发送拉取服务的请求委托给了ClientHttpRequest的excute方法,ClientHttpRequest是一个接口,这里是它的一个实现类InterceptingClientHttpRequest,我们继续看看InterceptingClientHttpRequest的excute方法的调用链:

InterceptingRequestExecution其实是InterceptingClientHttpRequest的内部类,因此共享InterceptingClientHttpRequest的成员变量:

LoadBanlancerInterceptor的处理逻辑
我们继续看看LoadBalancerInterceptor的intercept方法:

BlockingLoadBalancerClient的execute方法:

可以看到拉取服务实例的核心逻辑在choose方法,我们进到choose方法看看:

负载均衡器去拉取服务的逻辑比较复杂,我们直接来看看最后的处理逻辑,最后会调用CompositeDiscoveryClient的getInstances方法:

我们直接看NacosDiscoveryClient的getInstances方法:

继续看NacosServiceDiscovery的getInstances方法:

可以看到最底层的发送请求的逻辑还是交给了NamingService来做,我们之前服务注册的底层也是它来负责的。


1113

被折叠的 条评论
为什么被折叠?



