@LoadBalanced

image.png

收集RestTemplate

image.png

定义RestTemplateCustomizer

image.png

使用RestTemplateCustomizer,给RestTemplate添加拦截器

image.png

LoadBalancerInterceptor

image.png

RibbonLoadBalancerClient

  1. getServer【serverList从哪来?】
  2. 发起请求

image.png
image.png

初始化ServerList

构造一个空list:
image.png
image.png
构造LoadBalancer时,
image.png
ribbon从eureka 客户端拿数据
image.png
定时任务执行updateListOfServers()
DiscoveryEnabledNIWSServerList#obtainServersViaDiscovery 从Eureka获取ServerList
image.png

获取server:LoadBalancer.chooseServer()

image.png

rule.choose():最终负责选server。

PredicateBasedRule
image.png
选出server返回。

发起请求

image.png