微服务负载均衡器 LoadBalancer

一、什么是 SpringCloud LoadBalancer

Spring Cloud LoadBalance 是 Spring Cloud 官方自己提供的客户端负载均衡器,用来替代 Ribbon, 
Spring官方提供了两种负载均衡的客户端:

RestTemplate

RestTemplate 是 Spring 提供的用于访问 Rest 服务的客户端,RestTemplate 提供 了多种便捷访问远程 Http 服务的方法,能够大大提高客户端的编写效率。默认情况下,RestTemplate 默认依赖 jdk 的 HTTP 连接工具。

WebClient

WebClient 是 从Spring WebFlux 5.0 版本开始提供的一个非阻塞的基于响应式编程的进行 Http 请求的客户端工具。它的响应式编程的基于 Reactor 的。WebClient 中提供了标准 Http 请求方式对应的 get、post、put、delete等方法, 可以用来发起相应的请求。

二、创建项目

<dependencies>
    <!-- nacos 服务注册与发现 移除 ribbon 支持  -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!--添加 load balance 依赖,需要添加 spring-cloud 依赖,在父工程以及引入-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    </dependency>
</dependencies>

在 yml 文件中禁用 ribbon

spring:
  application:
    name: order-server
  cloud:
    nacos:
      server-addr: 192.168.33.62:8847
    # 不使用 ribbon
    loadbalancer:
      ribbon:
        enabled: false

项目目录结构如下

微服务负载均衡器 LoadBalancer

再次启动项目stock-nacos以及order-loadbalancer,访问http://localhost:8031/order/add,发现实现了随机负载均衡的效果。

三、自定义负载均衡策略

Loadbalancer 默认实现了如下两种负载均衡策略:

  • RandomLoadBalancer - 随机分配策略
  • (默认) RoundRobinLoadBalancer - 轮询分配策略

3.1、创建配置类

如果想要修改默认的负载均衡策略,比如采用随机分配策略。则可以如下创建配置类,不需要添加Configuration注解


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

3.2、修改主启动类

@SpringBootApplication
@LoadBalancerClient(name = "PAYMENT-SERVER", configuration = LoadBalancerConfig.class)
public class MainApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainApplication .class, args);
    }
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!