类图
RandomRule 随机策略
在服务列表中使用随机策略。使用concurrent 包下的ThreadLocalRandom生产随机数
RoundRobinRule 轮询策略
在服务列表中使用随机策略。使用AtomicInteger的compareAndSet方式保证多线程不会出错
WeightedResponseTimeRule 按平均响应时间计算权重策略
继承RoundRobinRule策略,但算法跟RoundRobinRule关系不大。只有在权重计算出错的时候才使用轮询方式,例如新加入的节点没权重的情况。
给定4个服务A\B\C\D平均响应时间为10\30\40\20。
计算总权重:10+30+40+20=100
响应时间越短我们希望分配概率越大,
权重转换:100-10,100-30,100-40,100-20=90,70,60,80
改成累加递增:90,160,220,300
0-300生成随机数,如果是80路由到A,如果是230路由到D
RetryRule 重试策略
默认子策略是RoundRobinRule,当第一次获取的不可用时,门限值时间内一直获取可用服务,门限值默认500ms。
使用Thread.interrupted()、Thread.yield() 控制超时。
ClientConfigEnabledRoundRobinRule 客户端配置轮询基类
默认使用RoundRobinRule策略、一般使用他的子类、提供客户端配置接口
BestAvailableRule 最佳可用策略
单位时间内在可用服务中找出请求数最少的。默认1分钟
PredicateBasedRule 筛选条件的抽象类
不能直接使用
AvailabilityFilteringRule 降级策略
启用熔断:niws.loadbalancer.availabilityFilteringRule.filterCircuitTripped 默认true
设置最大可用连接数:niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit 默认Integer最大值
也可按服务配置 serviceName.ribbon.ActiveConnectionsLimit=100