Nacos源码之服务拉取(RestTemplate)
我们来看一下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
来做,我们之前服务注册的底层也是它来负责的。