ribbon和feign源码
2021-07-13 18:07:14 3 举报
ribbon和feign源码流程图解析
作者其他创作
大纲/内容
BaseLoadBalancer.getAllServers()
ZoneAwareLoadBalancer
生成一个代理对象FeignClientFactoryBean
调用比如feignClient.getUser方法
生成真正的代理对象ReflectiveFeign.instance
分割线
DynamicServerListLoadBalancer构造方法
updateAction.doUpdate()
初始化ribbonnew FeignLoadBalancer.RibbonRequest
registerBeanDefinitions
LoadBalancerInterceptor
getUpdatedListOfServers
PollingServerListUpdater.start
getLoadBalancer(serviceId)
@Bean初始化restTemplate加上@LoadBalanced
executeAndDecode
初始化LoadBalancerFeignClient.loadBalance
loadBalancedRestTemplateInitializerDeprecated
关键拦截器
spring.factories
1
execute
NacosServerList.getServers
构造方法
BaseLoadBalancer.chooseServer
restOfInit()
restTemplateCustomizer
getRefreshExecutor().scheduleWithFixedDelay
feign调用
请求nacos服务器获取服务列表discoveryProperties.namingServiceInstance() .selectInstances
enableAndInitLearnNewServersFeature
生成一个Client,类型为LoadBalancerFeignClient
每隔30秒定时执行
ribbon开始
初始化ribbon
PredicateBasedRule.choose
结束
RibbonLoadBalancerClient.execute
spring扩展点:FeignClientFactoryBean实现了FactoryBean,所有初始化该对象的时候会调用FeignClientFactoryBean.getObject()方法真正实例化Feighnclient对象
服务发现
LoadBalancerInterceptor.intercept
EnableFeignClients
FeignClientsRegistrar.registerFeignClient()
@LoadBalanced
@Import(FeignClientsRegistrar)
入口
拿到@FeignClient注解的类
getServer(loadBalancer)
updateListOfServers()
LoadBalancerAutoConfiguration
这个定时任务每隔30秒会向Nacos同步最新的服务列表
RibbonServer初始化
SynchronousMethodHandler
feign初始化开始
LoadBalancerFeignClient.execute
FeignClientFactoryBean.getObject()
registerFeignClients
spring扩展点:FeignClientsRegistrar实现了ImportBeanDefinitionRegistrar接口,会调用registerBeanDefinitions
this.client.execute
SynchronousMethodHandler.invoke()
ZoneAwareLoadBalancer.chooseServer
服务列表-最终拿BaseLoadBalancerallServerList属性
2
真正更新DynamicServerListLoadBalancer.setServersList()
DynamicServerListLoadBalancer.doUpdate
0 条评论
下一页