Spring cloud

SpringCloud-Ribbon-02负载规则

2019-06-23  本文已影响8人  小亮__

内置负载均衡规则

负载均衡规则是Ribbon的核心,下面来看一下Ribbon内置的负载均衡规则。

Ribbon负责策略-全局配置

将ribbon全局的策略改成随机(也可以使用编码的方式,比较麻烦故不做介绍)
修改application.properties配置文件

ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

Ribbon负责策略-模块配置

在一些的业务使用场景中,我们可以需要针对不同的服务使用不同的负载策略,例如我们的服务调用外部服务server1和服务server2,我们希望在调用服务server1的时候使用RandomRule,在调用服务server2的时候使用RoundRobinRule

使用配置的方式(<clientName>.ribbon. 如下属性),修改application.properties配置文件

server1.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
server2.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RoundRobinRule

Ribbon负载策略-自定义

如果需要使用自定义的负载算法的时候,可以使用@Configuration 注解和@RibbonClient 注解

第一步:自定义复杂算法
创建自定义算法类RandomRule_ZY,并继承AbstractLoadBalancerRule,重写choose方式

// 获取存活的服务,选择第一个返回
public class RandomRule_ZY extends AbstractLoadBalancerRule{
    @Override
    public Server choose(Object key) {
        ILoadBalancer lb = getLoadBalancer();
        List<Server> upList = lb.getReachableServers();
        return upList.get(0)
    }
    @Override
    public void initWithNiwsConfig(IClientConfig clientConfig) {
    }
}

第二步:创建Ribbon的配置类。

/**
 * 该类为Ribbon的配置类
 * 注意:该类如果放在主应用程序上下文@ComponentScan所扫描的包中,则配置将会被所有Ribbon Client共享。
 */
@Configuration
public class RibbonConfiguration {
  @Bean
  public IRule ribbonRule() {
    // 负载均衡规则,改为自定义规则
    return new MySelfRule();
  }
}

第三步:指定需要使用自定义负载算法的服务
创建Configuration 类使用@Configuration 注解和@RibbonClient 注解

/**
 * 使用RibbonClient,为特定的目标服务自定义配置。
 * 使用@RibbonClient的configuration属性,指定Ribbon的配置类。
 */
@Configuration
@RibbonClient(name = "server1", configuration = RibbonConfiguration.class)
public class Configuration {
}

注意:Ribbon是懒加载的——首次请求Ribbon相关类才会初始化,这会导致首次请求过慢的问题,你可以配置饥饿加载,让Ribbon在应用启动时就初始化。ribbon.eager-load.enabled=true

上一篇下一篇

猜你喜欢

热点阅读