Spring Cloud Ribbon负载均衡策略自定义配置

一,负载均衡算法种类

Ribbon的核心组件是IRule,是所有负载均衡算法的父接口,其子类有:

 

idea快速查看子类或实现类的快捷键:CTRL+ALT+B。
每一个类就是一种负载均衡算法

RoundRobinRule   轮询
RandomRule         随机
AvailabilityFilteringRule   会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,还有并发的连接数超过阈值的服务,然后对剩余的服务列表进行轮询
WeightedResponseTimeRule  权重    根据平均响应时间计算所有服务的权重,响应时间越快服务权重越大被选中的概率越高。刚启动时,如果统计信息不足,则使用轮询策略,等信息足够,切换到 WeightedResponseTimeRule
RetryRule  重试    先按照轮询策略获取服务,如果获取失败则在指定时间内重试,获取可用服务
BestAvailableRule   选过滤掉多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
ZoneAvoidanceRule  符合判断server所在区域的性能和server的可用性选择服务
 
二,自定义配置负载均衡算法
 
配置很简单,在自定义配置类里面如下配置即可
@Configuration
public class ConfigBeans {

    @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
    /**自定义配置ribbon负载均衡算法
     * @return
     */
    @Bean
    public IRule myRule(){
        //return new RoundRobinRule();//轮询
        //return new RetryRule();//重试
        return new BestAvailableRule();
    }
}
很具业务需求选择合适的算法即可,当然可以根据具体业务需求自己写一个算法类
 
三,个性化定制不同微服务策略
如果要自定义Ribbon配置, 则需要把这个配置类放在@SpringBootApplication扫不到的包中(@ComponentScan),因为如果可以扫到自定义的Ribbon配置类的话,那么会对所有的Riboon都生效,也就是说这种情况下所有的微服务的负载均衡算法都是相同的。
 
3.1 配置类实现负载均衡策略
独立新建包,创建配置类
//独立的包,不在主启动类的包及其子包里
package com.ribbon;

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

import com.baosight.config.MyConfiguration;

/**
 * 使用RibbonClient,为特定name的Ribbon Client自定义配置.
 * 使用@RibbonClient的configuration属性,指定Ribbon的配置类.
 */
@Configuration
@RibbonClient(name = "springboot-eureka-clent", configuration = MyConfiguration.class)
public class ServiceProviderConfig {

}
3.2 使用配置文件实现负载均衡策略
创建配置类的方式虽然能够实现个性化定义,但是当有大量这类配置的时候,对各个RibbonClient 的配置信息都将分散在这些配置类中,使得修改和管理都变得非常麻烦。在Camden版本中,Spring Cloud Ribbon对 RibbonClient 的个性化配置做了进一步优化,可以通过.ribbon.=的形式进行配置。配置如下
#注册中心集群
eureka.client.service-url.defaultZone=http://10.25.25.92:8080/eureka/,http://10.25.25.24:8080/eureka/,http://10.25.25.39:8080/eureka/
server.port=8764
spring.application.name=service-ribbon
springboot-eureka-clent.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

ribbon配置优先级:Ribbon配置的优先级:属性配置 > JAVA配置>Netflix Ribbon默认配置

四,不依赖eureka实现Ribbon负载均衡

前面实现的负载均衡都是依赖eureka实现的,当然ribbon可以脱离eureka实现负载均衡。配置如下

#取消Ribbon使用Eureka
ribbon.eureka.enabled=false

#配置Ribbon能访问 的微服务节点,多个节点用逗号隔开
microservice-provider-user.ribbon.listOfServers=localhost:8001,localhost:8002

我这儿整理了比较全面的JAVA相关的面试资料,


需要领取面试资料的同学,请加群:473984645

猜你喜欢

转载自www.cnblogs.com/1013wang/p/12206360.html