先容
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 实战实用本领的小伙伴,请关注后期发布的文章,认真看完一定能让你有所劳绩。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |