ribbon组件

117 阅读1分钟

Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。它是一个基于HTTP和TCP的客户端负载均衡器。它可以通过在客户端中配置ribbonServerList来设置服务端列表去轮询访问以达到均衡负载的作用。

当Ribbon与Eureka联合使用时,ribbonServerList会被DiscoveryEnabledNIWSServerList重写,扩展成从Eureka注册中心中获取服务实例列表。同时它也会用NIWSDiscoveryPing来取代IPing,它将职责委托给Eureka来确定服务端是否已经启动。

而当Ribbon与Consul联合使用时,ribbonServerList会被ConsulServerList来扩展成从Consul获取服务实例列表。同时由ConsulPing来作为IPing接口的实现。

引入依赖(消费者上)

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-ribbon</artifactId>
    </dependency>
</dependencies>

开启负载

加入以下配置

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    return new RestTemplate();
}

选择负载方式

例:

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    return new RestTemplate();
}


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

七种负载

SF)~5K%_J9GS1TKCO%MRY6D.png

为对应的ribbon client指定负载策略,还可以定制自己的负载配置

@Configuration
@RibbonClient(name = "community-org", configuration = RandomRule.class)
public class RestTemplateConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }


}

使用属性自定义Ribbon配置

# 配置community-org服务的策略
community-org:
  ribbon:
    NFLoadBalancerRuleClassName:com.netflix.loadbalancer.RandomRule
    
# 所有Ribbon Client都使用
ribbon:
    NFLoadBalancerRuleClassName:com.netflix.loadbalancer.RandomRule
 

注意点

Spring Cloud Ribbon 默认使用轮询策略

No Feign Client for loadBalancing defined.错误

blog.csdn.net/qq_43788878…

SpringCloud 从 2020.0.1 版本之后,客户端负载均衡抛弃了 ribbon

采用 SpringCloud LoadBalancer 默认使用的是轮询负载均衡算法

引入依赖

<dependency> 
    <groupId>org.springframework.cloud</groupId> 
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> 
</dependency>

SpringCloud 的 LoadBalance 仅支持 2 种负载均衡策略:轮询(默认)和随机

轮询

只需要在 RestTemplate 的 Bean 对象上增加 @LoadBalanced 注解

www.cnblogs.com/studyjobs/p…