Spring Cloud LoadBalancer:实现高效负载均衡的必备工具
今日目标
掌握LoadBalancer
1. Spring Cloud LoadBalancer介绍
在微服务架构中,负载均衡是确保应用程序可靠性和高性能的重要组成部分。而Spring Cloud作为一种广泛应用的微服务框架,提供了丰富的解决方案来简化负载均衡的实现。其中,Spring Cloud LoadBalancer作为新一代的负载均衡解决方案,正以其出色的性能和灵活的特性成为开发者们追捧的爆款工具。
1.1. 什么是Spring Cloud LoadBalancer?
Spring Cloud LoadBalancer是Spring Cloud生态系统中的一个模块,从2020.0.0版本开始引入。它旨在提供一个轻量级、高性能且易于使用的客户端负载均衡解决方案。相较于传统的Ribbon负载均衡库,Spring Cloud LoadBalancer更加注重简化和解耦,同时借助Reactor和异步非阻塞I/O模型,提供了更高的并发处理能力。
思考:为什么学习LoadBalancer?
从Spring Cloud 2020.0.0版本开始,官方推荐使用Spring Cloud LoadBalancer代替Ribbon作为负载均衡的解决方案,Spring Cloud Nacos 2021 移除了 Ribbon.
细心的小伙伴可能已经发现了在介绍的Ribbon负载均衡的时候我们选择的SpringCloud版本是2020.0.0之前的

spring-cloud-starter-netflix-eureka-client
依赖中默认使用的负载均衡依赖是ribbon

对比SpringCloud2021版本的使用spring-cloud-starter-netflix-eureka-client
依赖中负载均衡依赖已经将Ribbon替换为spring-cloud-loadbalancer

注意,这里就不掩饰如何搭建项目,和之前的项目搭建方式是一样的,就是SpringCloud版本变化成了2021
1.负载均衡策略
LoadBalancer负载均衡策略,没有Ribbon的丰富,只提供了轮询和随机策略,在默认情况下使用的是轮询算法(RoundRobinLoadBalancer)

-
RoundRobinLoadBalancer:基于轮询负载均衡策略 -
RandomLoadBalancer: 基于随机负载均衡策略
2.LoadBalancer自定义负载均衡策略
LoadBalancer自定义的负载均衡切换方式有两种方式
-
新建类注入负载均衡策略Bean -
直接在Spring的配置文件中注入Bean
2.1. 新建类注入负载均衡策略Bean
package com.zbbmeta.order.config;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.loadbalancer.core.RandomLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;
/**
* @author springboot葵花宝典
* @description: TODO
*/
public class CustomLoadBalancerConfiguration {
@Bean
ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
LoadBalancerClientFactory loadBalancerClientFactory) {
String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
return new RandomLoadBalancer(loadBalancerClientFactory
.getLazyProvider(name, ServiceInstanceListSupplier.class),
name);
}
}
/**
* @author springboot葵花宝典
* @description: TODO
*/
@Configuration
@LoadBalancerClients(defaultConfiguration = {CustomLoadBalancerConfiguration.class})
public class OrderConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
RestTemplate restTemplate = new RestTemplate();
return restTemplate;
}
}

2.2. 直接在Spring的配置文件中注入Bean
@Configuration
@LoadBalancerClients(defaultConfiguration = {OrderConfig.class})
public class OrderConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
RestTemplate restTemplate = new RestTemplate();
return 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);
}
}
如果您觉得本文不错,欢迎关注,点赞,收藏支持,您的关注是我坚持的动力!
原创不易,转载请注明出处,感谢支持!如果本文对您有用,欢迎转发分享!
原文始发于微信公众号(springboot葵花宝典):Spring Cloud LoadBalancer:实现高效负载均衡的必备工具
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/183234.html