Spring Cloud(1)Spring Cloud LoadBalancer客户端负载均衡组件

文章目录

  • 1.Spring Cloud LoadBalancer介绍
  • 2. 快速开始
    • 2.1.引入依赖
    • 2.2. RestTemplate中使用Spring Cloud LoadBalancer
  • 3. 切换负载均衡算法

1.Spring Cloud LoadBalancer介绍

Spring Cloud LoadBalancer是Spring Cloud官网提供的一个客户端负载均衡器,功能类似于Ribbon。在最新版本的Spring Cloud中Ribbon组件已经被剔除,Spring Cloud在Spring Cloud Commons项目中,添加了Spring cloud Loadbalancer作为新的负载均衡器。

2. 快速开始

本 文 实 例 使 用 的 S p r i n g C l o u d 版 本 是 : 2020.0.4 , S p r i n g B o o t 版 本 是 : 2.5.6 本文实例使用的Spring Cloud版本是:2020.0.4,Spring Boot版本是:2.5.6 使SpringCloud2020.0.4SpringBoot2.5.6

2.1.引入依赖

<dependency>
      <groupId>org.springframework.cloudgroupId>
      <artifactId>spring-cloud-starter-loadbalancerartifactId>
dependency>

如果项目中,使用了Eureka作为注册中心,则spring-cloud-starter-netflix-eureka-client,中包含了spring-cloud-starter-loadbalancer的依赖,如果已经引入了eureka组件,则无需单独引入spring-cloud-starter-loadbalancer

Spring Cloud(1)Spring Cloud LoadBalancer客户端负载均衡组件_第1张图片

2.2. RestTemplate中使用Spring Cloud LoadBalancer

@Configuration
public class MyConfiguration {

    @LoadBalanced
    @Bean
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
   
//----------省略其他代码---------------
private RestTemplate restTemplate;
@GetMapping("/findUserStatus/{userId}")
public Integer findUserStatus(@PathVariable Long userId) {
    Integer results = restTemplate.getForObject("http://demo-user-service/findUserStatusById/"+userId, Integer.class);
    return results;
}

可以通过将 spring.cloud.loadbalancer.enabled 的值设置为 false 来禁用 Spring Cloud LoadBalancer

3. 切换负载均衡算法

Spring Cloud 通过ReactiveLoadBalancer 接口,提供了两种负载均衡算法:

  • RandomLoadBalancer 随机策略 。
  • RoundRobinLoadBalancer 轮询 策略,默认实现。

Spring Cloud(1)Spring Cloud LoadBalancer客户端负载均衡组件_第2张图片

例如,可以通过@LoadBalancerClient 注解或者@LoadBalancerClients传递以下配置以切换到使用 RandomLoadBalancer

public class CustomLoadBalancerConfiguration {

    @Bean
    ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
                                                            LoadBalancerClientFactory loadBalancerClientFactory) {
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
        return new RandomLoadBalancer(loadBalancerClientFactory
                .getLazyProvider(name, ServiceInstanceListSupplier.class),
                name);
    }
}

通过@LoadBalancerClients注册加载配,切换到 RandomLoadBalancer策略。

@Configuration
@LoadBalancerClients(defaultConfiguration = {CustomLoadBalancerConfiguration.class})
public class MyConfiguration {
    @LoadBalanced
    @Bean
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

参考Spring Cloud官网文档:https://docs.spring.io/spring-cloud-commons/docs/current/reference/html/#spring-cloud-loadbalancer

你可能感兴趣的:(Spring,Cloud,spring,cloud,负载均衡,loadbalancer)