Ribbon自定义负载均衡策略
细粒度配置自定义,java代码实现
/**
*必须放在启动类外面的包,不然会被启动类扫描到,出现父子上下文重叠
*/
@Configuration
public class RibbonConfiguration {
@Bean
public IRule ribbonRule(){
return new RandomRule();
}
}
package com.yz.alibaba.config;
import com.yz.configuration.RibbonConfiguration;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.context.annotation.Configuration;
@Configuration
@RibbonClient(name = "spring-cloud-alibaba-nacos",configuration = RibbonConfiguration.class)
//全局配置
//@RibbonClients(defaultConfiguration = RibbonConfiguration.class)
public class UserRibbonConfiguration {
}
配置文件实现
#服务名
spring-cloud-alibaba-nacos:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
配置方式 | 优点 | 缺点 |
---|---|---|
代码配置 | 基于代码更加灵活 | 有小坑(父子上下文),线上修改得重新打包,发布 |
属性配置 | 易上手,配置更加直观,线上发布无需重新打包发布,优先级更高 | 极端场景下没有代码配置方式灵活 |
ribbon的策略主要有以下几种:
- com.netflix.loadbalancer.RandomRule #配置规则 随机
- com.netflix.loadbalancer.RoundRobinRule #配置规则 轮询
- com.netflix.loadbalancer.RetryRule #配置规则 重试
- com.netflix.loadbalancer.WeightedResponseTimeRule #配置规则 响应时间权重
- com.netflix.loadbalancer.BestAvailableRule #配置规则 最空闲连接策略
随机:几个提供者间随机访问
轮询:轮流访问
重试:在一段时间内通过RoundRobinRule选择服务实例,一段时间内没有选择出服务则线程终止
RestTemplate 第一次调用时间比较久,所以使用饥饿加载
ribbon:
eager-load:
clients: spring-cloud-alibaba-nacos
enabled: true