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 |







网友评论