Spring Cloud Ribbon源码分析
2025-07-04 15:44:05 0 举报
Spring Cloud Ribbon源码分析
作者其他创作
大纲/内容
initWithConfig
BaseLoadBalancer
bean指向
serverListUpdater.start
每隔30s更新一次服务列表
调用真实的地址发起请求
获取所有Eureka实例列表
定时更新Eureka实例列表
updateListOfServers
enableAndInitLearnNewServersFeature
在构造方法中执行
restOfInit(clientConfig)
使用eurekaClient获取服务实例列表
eurekaClient.getInstancesByVipAddress
DiscoveryEnabledNIWSServerList.getUpdatedListOfServers
父类初始化
serverListImpl.getUpdatedListOfServers()
setServersList
updateAllServerList
每10s去检查一次服务列表是否正常运行(默认情况下不会去验证)
setPingInterval
IPing=DummyPing
RibbonLoadBalancerClient.execute
从本地配置获取服务列表
指向初始化的Bean
@AutoConfigureBefore
clientConfig.get(CommonClientConfigKey.ListOfServers);
ConfigurationBasedServerList.getUpdatedListOfServers
从Eureka注册中心上动态获取服务列表
allServerList
upServerList
AbstractAsyncClientHttpRequest.executeAsync
保存更新后的服务列表
request.apply
2.通过负载均衡器中配置的默认负载均衡算法挑选一个合适的Server
rule.choose(key)
RibbonLoadBalancerClient.reconstructURI
ServiceRequestWrapper.getURI
request.getURI();
1. 重构URI
request.getURI()
InterceptingAsyncClientHttpRequest.executeAsync
request=ServiceRequestWrapper通过匿名内部类来构建
Bean的装配
RestTemplateCustomizer的作用是对修饰了@LoadBalanced注解的RestTemplate实例添加LoadBalancerInterceptor拦截器
用RestTemplateCustomizer定制所有被@LoadBalanced注解修饰的RestTemplate实例
SmartInitializingSingleton
RestTemplateCustomizer
2. 发起异步远程调用
LoadBalancerInterceptor
利用工厂模式,根据serviceId获得IBalancer实例
LoadBalancerInterceptor.intercept()
restTemplate.getForObject("http://test-spring-cloud-user/user")
RibbonLoadBalancerClient
Ribbon
RestTemplate.getForObject()
订单服务
1. 获取负载均衡器
用户服务
IRule=ZoneAvoidanceRule
ILoadBalancer=ZoneAwareLoadBalancer
RibbonClientConfiguration
clientFactory.getLoadBalancer(serviceId);
IBalancer=getLoadBalancer(serviceId)
LoadBalancerClient.execute()
请求被拦截
DynamicServerListLoadBalancer
通过配置文件可以指定负载均衡的规则
默认采用轮询算法来实现请求的负载
LoadBalancerClient
AbstractServerPredicatechooseRoundRobinAfterFiltering
@LoadBalanced
PredicateBasedRule
LoadBalancerAutoConfiguration
RibbonAutoConfiguration
BaseLoadBalancer.chooseServer
loadBalancer.chooseServer
ServerListUpdater=PollingServerListUpdater
初始化bean
0 条评论
下一页