Ribbon自定义负载均衡策略

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