当前位置: 首页 > news >正文

Spring Cloud LoadBalancer负载均衡+算法切换

目录

    • 介绍
    • 核心功能
    • 负载均衡
      • 启动两个支付服务
      • 订单模块引入依赖
      • @LoadBalanced 注解
      • 启动订单服务
      • 测试结果
    • 负载均衡算法切换
    • 总结

介绍


Spring Cloud LoadBalancer 是 Spring Cloud 提供的客户端负载均衡解决方案,提供更现代化的 API 和更好的 Spring 生态系统集成。它支持微服务架构中服务调用的负载均衡,适用于分布式系统中的流量分发和故障转移。

核心功能


客户端负载均衡

  • 在客户端实现负载均衡逻辑,无需服务端代理。
  • 支持基于服务名的调用 (如 http://service-name),自动解析服务实例列表。

多种负载均衡策略

  • 默认支持 轮询 (Round Robin) 和随机 (Random) 策略。
  • 可自定义实现其他策略 (如加权轮询、最小连接数等)。

服务发现集成

  • 与 Spring Cloud 服务发现组件 (如 Eureka、Consul、Nacos) 无缝集成。
  • 动态获取服务实例列表,支持实例上下线自动更新。

响应式支持

  • 支持阻塞式 (BlockingLoadBalancerClient) 和非阻塞式 (ReactiveLoadBalancer) 请求处理。
  • 可与 RestTemplate 和 WebClient 配合使用。

高可用与容错

  • 内置重试机制 (如 spring.cloud.loadbalancer.retry.enabled=true)。
  • 支持健康检查,自动剔除故障实例。

配置灵活性

  • 通过 application.yml 或 application.properties 配置行为。
  • 支持自定义负载均衡算法和规则。

负载均衡


启动两个支付服务

分别启动两个支付服务,端口8001和8002。
在这里插入图片描述

订单模块引入依赖

<!-- SpringCloud loadbalancer -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

@LoadBalanced 注解

给 RestTemplate 标注 @LoadBalanced 注解,在客户端实现负载均衡功能。

@Configuration
public class RestTemplateConfig {

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

启动订单服务

启动订单服务,端口9001。

@GetMapping("/order/pay/getInfoByConsul")
public String getInfoByConsul() {
    return restTemplate.getForObject(payment_url + "/pay/getInfoByConsul", String.class);
}

在这里插入图片描述

测试结果

当调用9001订单接口 http://localhost:9001/order/pay/getInfoByConsul ,会轮询调用8001和8002获取 consul 配置信息。

负载均衡算法切换


负载均衡算法默认有两种:

  • 轮询: RoundRobinLoadBalancer
  • 随机: RandomLoadBalancer

算法切换

从默认的轮询,切换为随机算法。

@Configuration
// value中的服务名大小写必须和consul服务名一样
@LoadBalancerClient(value = "cloud-payment-service", configuration = RestTemplateConfig.class)
public class RestTemplateConfig {
    
    @Bean
    @LoadBalanced  // 赋予RestTemplate负载均衡的能力
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

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

总结


以上主要介绍了 Spring Cloud LoadBalancer 负载均衡、算法切换的相关知识,想了解更多 Spring Cloud LoadBalancer 知识的小伙伴请参考 Spring Cloud LoadBalancer 官网 进行学习,学习更多 Spring Cloud 实战实用技巧的小伙伴,请关注后期发布的文章,认真看完一定能让你有所收获。

相关文章:

  • 转运公司网站建设ds2600ii色带
  • 网站建设的类型或分类百度识图在线识别
  • 哪个网站可以直接做ppt线下推广方法有哪些
  • 做网站容易 但运营难湖南网站设计外包费用
  • 网站图片如何优化厦门seo公司到1火星
  • 收藏的网站从做系统后找不到了百度电话客服24小时人工
  • c++中同步和异步,阻塞和非阻塞原理以及机制
  • 【KWDB 创作者计划】_从底层技术到应用实战:KWDB 系列文章总览
  • 0. 七小时挑战:自研企业级任务调度器--前言
  • Python爬虫第7节-requests库的高级用法
  • 【学习自用】配置文件中的配置项
  • LVGLBuilder 详解:用声明式语法构建嵌入式GUI的高效之道
  • LeetCode406☞根据身高重建队列
  • DDoS防护:从基础认知到实战防御的全方位指南
  • Jmeter 插件【性能测试监控搭建】
  • c语言练习一
  • 【数据分享】1999—2023年地级市市政公用事业和邮政、电信业发展情况相关指标(Shp/Excel格式)
  • 【11408学习记录】英语语法精讲:主从复合句核心解析与纪要写作实战指南 | 附每日一句长难句拆解
  • 基于SpringBoot+Vue的在线云拍卖行系统【提供源码+答辩PPT+参考文档+项目部署】
  • docker 修改镜像源教程
  • Gitea的安装和配置以及应用
  • react动态路由
  • kotlin,Android,jetpack compose,日期时间设置
  • 状态机的基本使用
  • 天文学数据集记录 | 智能体知识库| AI大模型训练
  • 利用持久变量绕过长度限制 + unicode特性绕过waf-- xyctf 出题人已疯12 复现