微服务 - 修改Ribbon默认负载均衡策略

【Ribbon框架自带的负载策略类】

常见框架自带7种实现:
 # com.netflix.loadbalancer.RoundRobinRule  - 轮询
 # com.netflix.loadbalancer.RandomRule  - 随机
 # com.netflix.loadbalancer.RetryRule - 重试,先按RoundRobinRule进行轮询,如果失败就在指定时间内进行重试
 # com.netflix.loadbalancer.WeightedResponseTimeRule - 权重,响应速度越快,权重越大,越容易被选中。
 # com.netflix.loadbalancer.BestAvailableRule  - 先过滤掉不可用的处于断路器跳闸转态的服务,然后选择一个并发量最小的服务
 # com.netflix.loadbalancer.AvailabilityFilteringRule - 先过滤掉故障实例,再选择并发量较小的实例
 # com.netflix.loadbalancer.ZoneAvoidanceRule - 默认规则,复合判断server所在区域的性能和server的可用性进行服务的选择。


【主要步骤】

第一步:新建一个不会被@ComponentScan组件扫描到的包,如:com.rules
第二步:在该包下新建自己的负载均衡算法的规则类
第三步:主启动类上添加注解:@RibbonClient

【替换的策略类】

package com.rules;

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

/**
 * @desc 自定义负载均衡策略(用于替换默认的RoundRobinRule轮询策略)
 */
@Configuration
public class MyLoadBalanceRule {

  /**
   * @desc 自定义负载均衡规则,默认是轮询规则
   * @return
   */
  @Bean
  public IRule myRule(){
    return new RandomRule(); // 改为随机算法规则
  }

}

【主启动类】

package com.cloud.application;

import com.rules.MyLoadBalanceRule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.ribbon.RibbonClient;

@SpringBootApplication(scanBasePackages = {"com.cloud"})
@EnableDiscoveryClient
@RibbonClient(name = "cloud-payment-service",configuration = MyLoadBalanceRule.class)
public class OrderServiceApplication {

  public static void main(String[] args) {

    SpringApplication.run(OrderServiceApplication.class, args);

  }

}

 

 

你可能感兴趣的:(微服务 - 修改Ribbon默认负载均衡策略)