一、restTemplate 是 Spring Resources 中一个访问第三方 API 接口的网络请求框架,用来消费REST 服务的缓存
二、ribbon 做为服务消费者的负载均衡器,有两种使用 方式网络
1)ribbon和restTemplate 相结合app
2)ribbon和feign相结合,feign已经默认集成了 ribbon负载均衡
三、负载均衡器的核心类LoadBalancerClient框架
LoadBalancerClient 的 choose(”eureka-client'’)方法能够轮流获得 eureka-client 的两个 服务实例的信息。google
@Autowiredrest
private LoadBalancerClient loadBalancer;server
@GetMapping (”/ testRibbon”)对象
public String testRibbon () {接口
Serviceinstance instance = loadBalancer.choose (”eureka client");
return instance . getHost ()+”:”+i nstance . getPor t ();
}
}
四、ribbon获取服务来源
1)从 Eureka Client获取获取服务的实例列表
ribbon会默认从 Eureka Client 的服务注册列表中获取服务的信息,并缓存一份。
根据缓存的服务注册列表信息,能够经过 LoadBalancerClient 来选择不一样的服务实例, 从而实现负载均衡
2)从本身维护的列表中获取服务的实例
若是禁止 ribbon从 Eureka 获取注册列表信息,则须要本身去维护一份服 务注册列表信息
stores :
ribbon:
listOfServers : exarnple . corn, google. corn
ribbon :
eureka :
enabled: false
五、ribbon源码
1)ServiceInstanceChooser ---->ServiceInstance choose(String serviceId);
2)RibbonLoadBalancerClient----->ServiceInstance choose(String serviceId)---->Server getServer(ILoadBalancer loadBalancer)
3)ILoadBalancer---->Server chooseServer(Object var1)
4)DynamicServerListLoadBalancer---->Server chooseServer(Object var1)
5)IRule ------> Server choose(Object key)
BestAvailableRule: 选择最小请求数。
ClientConfigEnabledRoundRobinRule:轮询。
RandornRule: 随机选择一个 server。
RoundRobinRule: 轮询选择 server。
ReRule: 根据轮询的方式重试。
WeightedResponseTirneRule: 根据响应时间去分配一个 weight , weight 越低,被选 择的可能性就越低。
ZoneAvoidanceRule:根据 server 的 zone 区域和可用性来轮询选
六、 ribbon 的负载均衡主要是经过 LoadBalancerClient 来实现的,而 LoadBalancerClient 具体交给了 ILoadBalancer 来处理, ILoadBalancer 经过配置 !Rule、 !Ping 等,向 EurekaClient 获取注册列表的信息,默认每 10 秒向 EurekaClient 发送一次“ping”, 进而检查是否须要更新 服务的注册列表信息。最后,在获得服务注册列表信息后, ILoadBalancer 根据!Rule 的策略进 行负载均衡。 而 RestTemplate 加上@LoadBalance 注解后,在远程调度时可以负载均衡, 主要是维护了 一个被@LoadBalance 注解的 RestTemplate 列表,并给该列表中的 RestTemplate 对象添加了拦 截器。在拦截器的方法中,将远程调度方法交给了 Ribbon 的负载均衡器 LoadBalancerClient 去处理,从而达到了负载均衡的目