ribbon的作用是微服务客户端的一个负载均衡发现器,今天我们就讲一下ribbon底层源码是如何从注册中心获取服务列表的,下面我们就讲一下源码是如何实现的
我之前有篇文章讲过,controller通过调用restTemplate.getForObject()方法最终会调用到LoadBalancerInterceptor的intercept方法,
继续进入这个execute方法
在这里会先去获取一个负载均衡器IloadBalancer,我们看看这个this.getLoadBalancer()方法里面做了什么
这里通过getInstance,最后会调用SpringClientFactory父类的getInstance方法,我进入父类NamedContextFactory看看这个getInstance方法做了什么
这里核心的逻辑就是,先去本地缓存获取我们调用服务的上下问对象,如果没有就为每个为我们要调用的微服务创建一个上下文对象,并且放入本地缓存里面,我们重点看看这个createContext方法
在这段代码里面,new了一个AnnotationConfigApplicationContext类,这个类就是Spring的上下文对象,然后调用context的register方法,为容器注册了一个RibbonClientConfiguration配置类,最后调用context的refresh方法,会走spring 容器的生命周期流程,这里就不做过多赘述,我们来看看这个RibbonClientConfiguration这个类