SpringCloud学习笔记(8)----Spring Cloud Netflix之负载均衡-Ribbon的负载均衡的策略

点点圈 提交于 2020-01-01 02:20:52

一、 内置 负载均衡策略的介绍的

  IRule的实现类

  

  

 

 

 

2. 通过代码实现负载均衡

  在第六节Riddom的使用的工程中,随机策略配置类

 
package com.wangx.cloud.springcloud02consumer.configure;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RandomRuleConfig {

    @Bean
    public IRule randomRule() {
        return new RandomRule();
    }
}
 

  

 
package com.wangx.cloud.springcloud02consumer.configure;

import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.context.annotation.Configuration;

@Configuration
@RibbonClient(name = "spring-cloud-provider", configuration = RandomRuleConfig.class)
public class ProviderConfiguration {
}
 

  

说明:只需要简单的2 个配置,就可以指定轮询的算法。
注意:在RandomRuleConfig 的类里面,加上@Configuration 注解会导致所有的策略都被覆盖。
原因:如果RandomRuleConfig 被SpringContext 扫描,否则会被@RibbonClients 共用,会覆盖。

 3.  同时使用2 种以上的不同策略算法

  方法1:移除算法类的@Configuration注解

  方法2: 使用@ComponentScan指定扫描路径,默认是启动类包及其子包下

  方法3:将它移到主类的外面,让启动类扫描不到

  说明:总之就是不要让SpringContext扫描到即可

4. 通过配置文件实现不同策略的算法

  配置文件添加

  

#设置策略
  #spring-cloud-provider.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

  //提供者1用随机策略
  spring-cloud-provider2.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

  //使用自定义的请求策略
  spring-cloud-provider.ribbon.NFLoadBalancerRuleClassName=com.wangx.cloud.configuration.WangxCustomRuleCustomRule
#格式为:应用名.ribbon.NFLoadBalancerRuleClassName=xxx

注意:当使用自定义策略时需要继承AbstractLoadBalancerRule抽象类。实现该类的抽象方法。

原文 SpringCloud学习笔记(8)----Spring Cloud Netflix之负载均衡-Ribbon的负载均衡的策略

一、 内置 负载均衡策略的介绍的

  IRule的实现类

  

  

 

 

 

2. 通过代码实现负载均衡

  在第六节Riddom的使用的工程中,随机策略配置类

 
package com.wangx.cloud.springcloud02consumer.configure;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RandomRuleConfig {

    @Bean
    public IRule randomRule() {
        return new RandomRule();
    }
}
 

  

 
package com.wangx.cloud.springcloud02consumer.configure;

import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.context.annotation.Configuration;

@Configuration
@RibbonClient(name = "spring-cloud-provider", configuration = RandomRuleConfig.class)
public class ProviderConfiguration {
}
 

  

说明:只需要简单的2 个配置,就可以指定轮询的算法。
注意:在RandomRuleConfig 的类里面,加上@Configuration 注解会导致所有的策略都被覆盖。
原因:如果RandomRuleConfig 被SpringContext 扫描,否则会被@RibbonClients 共用,会覆盖。

 3.  同时使用2 种以上的不同策略算法

  方法1:移除算法类的@Configuration注解

  方法2: 使用@ComponentScan指定扫描路径,默认是启动类包及其子包下

  方法3:将它移到主类的外面,让启动类扫描不到

  说明:总之就是不要让SpringContext扫描到即可

4. 通过配置文件实现不同策略的算法

  配置文件添加

  

#设置策略
  #spring-cloud-provider.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

  //提供者1用随机策略
  spring-cloud-provider2.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

  //使用自定义的请求策略
  spring-cloud-provider.ribbon.NFLoadBalancerRuleClassName=com.wangx.cloud.configuration.WangxCustomRuleCustomRule
#格式为:应用名.ribbon.NFLoadBalancerRuleClassName=xxx

注意:当使用自定义策略时需要继承AbstractLoadBalancerRule抽象类。实现该类的抽象方法。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!