一、Spring定制化RestTemplate,预留出RestTemplate定制化扩展点
org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration
二、Ribbon定义RestTemplate Ribbon扩展点功能
org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration
LoadBalancerInterceptor使用ribbon LoadBalancerClient
ribbon定时拉取机器列表
ribbon通过eureka获取机器列表
ribbon自己缓存了机器列表,然后定时通过eureka进行同步。
ribbon核心的负载均衡逻辑,就在com.netflix.loadbalancer.IRule,怎根据key选择服务器的逻辑,也就在怎么实现这个接口。
ribbon配置,先使用loadDefaultValues加载默认的配置,然后再获取配置中服务下的ribbon配置,用subset获取。
使用NamedContextFactory进行子上下文获取时,会对org.springframework.cloud.netflix.ribbon.RibbonClientConfiguration进行初始化
子上下文初始化的过程中,会进行configuration初始化,可以看到ribbonClientConfig里面就会加载这个服务级别的ribbon配置
@RibbonClient注解解析原理
二、与nacos注册发现整合
ribbon与nacos整合只在低版本,nacos注册发现依赖提供了对ribbon的支持,高版本不在提供对ribbon的支持。
依赖地址:
<!-- Spring Cloud Alibaba Nacos Discovery --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>1.5.1.RELEASE</version> </dependency>
从2020.0.x及之后的版本,spring-cloud-starter-alibaba-nacos-discovery取消了对ribbon的支持。
三、社区活跃与维护
可以看到,从2021年后,ribbon就没有发布过新版本。