1. 负载均衡策略
- 接口 com.netflix.loadbalancer.IRule
策略类 | 名称 | 描述 |
---|---|---|
RandomRule | 随机策略 | 随机选择 |
RoundRobinRule | 轮询策略 | 按顺序循环选择 |
RetryRule | 重试策略 | 若选择不成功,则重试 |
BestAvailableRule | 最低并发策略 | 选择并发连接最低的 server |
AvailabilityFilteringRule | 可用过滤策略 | |
ResponseTimeWeightedRule | 响应时间加权策略 | 根据 server 的响应时间分配权重 |
ZoneAvoidanceRule | 区域权衡策略 |
1.1 全局策略设置
@Configuration
public class MyRule {
@Bean
public IRule ribbonRule() {
return new RandomRule();
}
}
启动类配置
@RibbonClient 表示访问 concrete-eureka-client 服务时使用的策略是 MyRule 配置的
@SpringBootApplication
@EnableEurekaClient
@RibbonClient(name = "concrete-eureka-client", configuration = MyRule.class)
public class ConcreteRibbonApplication {
public static void main(String[] args) {
SpringApplication.run(ConcreteRibbonApplication.class, args);
}
}
1.2 基于配置文件的策略设置
# 配置 ribbon 规则
concrete-eureka-client: # 被调用服务名称
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
2. 超时重试
# 全局超时配置
ribbon:
ConnectTimeout: 5000
ReadTimeout: 5000
MaxAutoRetries: 1 # 对第一次请求的服务的重试次数
MaxAutoRetriesNextServer: 2 # 要重试的下一个服务的重试次数
OkToRetryOnAllOperations: true #对所有操作请求都进行重试,默认false
如果是配置下实例下只作用于当前实例
concrete-eureka-client: # 被调用服务名称
ribbon:
ConnectTimeout: 5000
ReadTimeout: 5000
MaxAutoRetries: 1
MaxAutoRetriesNextServer: 2
2. 核心工作原理
核心接口 | 描述 | 默认实现类 |
---|---|---|
IClientConfig | 管理配置接口 | DefaultClientConfigImpl |
IRule | 负载均衡策略接口 | ZoneAvoidanceRule |
IPing | 定期 ping 服务检查可用性接口 | DummyPing |
ServerList<Server> | 获取服务列表方法 | ConfigurationBaseServerList |
serverListFilter<Server> | ZonePreferenceServerListFilter | |
ILoadBalancer | 负载均衡选择服务 | ZoneAwareLoadBalancer |
ServerListUpdater | PollingServerListUpdate |
网友评论