• Spring Cloud Nacos 2021使用LoadBalancer做负载均衡


    项目源码:https://download.csdn.net/download/weixin_42950079/87150709



    Spring Cloud Nacos 2021 移除了 Ribbon,在Spring Cloud Commons 项目中添加了 Spring Cloud LoadBalancer 作为新的负载均衡器

    <dependency>
        <groupId>com.alibaba.cloudgroupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
        <version>2021.0.1.0version>
    dependency>
    
    
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-loadbalancerartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    LoadBalancer负载均衡策略

    LoadBalancer 的负载均衡策略没有 Ribbon 那么丰富,只提供了RandomLoadBalancerNacosLoadBalancerRoundRobinLoadBalancer,在不指定的时候默认使用RoundRobinLoadBalancer轮询负载均衡策略。 👉👉👉推荐使用整合 Ribbon 的方式来实现负载均衡。
    cd

    • RandomLoadBalancer :基于随机访问的负载均衡策略
    • NacosLoadBalancer:基于Nacos权重的负载均衡策略
    • RoundRobinLoadBalancer:基于轮询的负载均衡策略

    切换LoadBalancer负载均衡策略

    • 使用基于随机访问的负载均衡策略,注意返回类型是 ReactorLoadBalancer
    @Configuration
    public class CustomLoadBalancerConfiguration {
    
        // 参考 NacosLoadBalancerClientConfiguration
        @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);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    • 使用基于轮询的负载均衡策略,注意返回类型是 ReactorLoadBalancer
    @Configuration
    public class CustomLoadBalancerConfiguration {
    
        // 参考 NacosLoadBalancerClientConfiguration
        @Bean
        public ReactorLoadBalancer<ServiceInstance> roundRobinLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) {
            String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
    
            return new RoundRobinLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    使用负载均衡策略

    • 在启动类上添加@LoadBalancerClient注解,指定xxx服务使用xxx负载均衡策略。
    @SpringBootApplication
    @LoadBalancerClients(
            @LoadBalancerClient(value = "stock-service", configuration = CustomLoadBalancerConfiguration.class)
    )
    public class Order8010Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Order8010Application.class);
            System.out.println("order8010 --> 项目启动成功");
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    然后测试即可

    测试时,记得先启动 Nacos 集群哦,然后再浏览器中输入:localhost:8010/order/add

  • 相关阅读:
    Cmake升级与软链接
    CVE-2023-3836:大华智慧园区综合管理平台任意文件上传漏洞复现
    设计模式-代理模式
    【React源码】(十三)Hook 原理(状态 Hook)
    使用扩展函数方式,在Winform界面中快捷的绑定树形列表TreeList控件和TreeListLookUpEdit控件
    [陇剑杯2021] 复现
    Server - Kubernetes (K8S) 运行 PyTorchJob 的 YAML 配置
    全志A523(显示篇一)
    latex bib title变小写了怎么办
    Git学习(2):Git基础命令
  • 原文地址:https://blog.csdn.net/weixin_42950079/article/details/128010110