微服务负载均衡器 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项目目录结构如下

再次启动项目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 协议》,转载必须注明作者和本文链接
 
           HuDu 的个人博客
 HuDu 的个人博客
         
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号