Spring Cloud Ribbon 详解
客户端负载均衡, Ribbon的核心概念是命名的客户端.
使用
引入Ribbon依赖和配置
加入spring-cloud-starter-netflix-ribbon
依赖
代码中使用RibbonClient注解
@Configuration
@RibbonClient(name = "foo", configuration = FooConfiguration.class) public class TestConfiguration {}
@Configuration protected static class FooConfiguration {
@Bean
public ZonePreferenceServerListFilter serverListFilter() {
ZonePreferenceServerListFilter filter = new ZonePreferenceServerListFilter();
filter.setZone("myTestZone");
return filter;
}
@Bean
public IPing ribbonPing() {
return new PingUrl();
}
}
Ribbon客户端的配置, 如果不指定会使用默认的实现:
- IClientConfig 客户端相关配置
- IRule 定义负载均衡策略
- IPing 定义如何ping目标服务实例来判断是否存活, ribbon使用单独的线程每隔一段时间(默认10s)对本地缓存的ServerList做一次检查
- ServerList
定义如何获取服务实例列表. 两种实现基于配置的 ConfigurationBasedServerList
和基于Eureka服务发现的DiscoveryEnabledNIWSServerList
- ServerListFilter
用来使用期望的特征过滤静态配置动态获得的候选服务实例列表. 若未提供, 默认使用 ZoneAffinityServerListFilter
- ILoadBalancer 定义了软负载均衡器的操作的接口. 一个典型的负载均衡器至少需要一组用来做负载均衡的服务实例, 一个标记某个服务实例不在旋转中的方法, 和对应的方法调用从实例列表中选出某一个服务实例.
- ServerListUpdater DynamicServerListLoadBalancer用来更新实例列表的策略(推
EurekaNotificationServerListUpdater
/拉PollingServerListUpdater
, 默认是拉)