【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); } }