定制软件开发使用LoadBalancer替换Ribbon负载均衡器

SpringCloud LoadBalancer是SpringCloud定制软件开发官方自己提供的客户端定制软件开发负载均衡器,定制软件开发用来替代的。因为netfilx停更了,所以SpringCloud定制软件开发官方就自己开发了一块客户端负载均衡器这边用来替代Ribbon。但是目前是没有办法去替代Ribbon的。因为它目前的负载均衡算法还很少。

SpringCloud在早期是把Ribbon当做它的负载均衡器,在SpringCloud2021版的时候就移除了Ribbon,改用Loadbalancer为默认的负载均衡器

RestTemplate整合LoadBalancer

  1. 剔除ribbon依赖,引入LoadBalancer的依赖

    <dependencies>    <!--nacos的服务注册与发现依赖-->    <dependency>        <groupId>com.alibaba.cloud</groupId>        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>        <!-- 剔除ribbon的依赖 -->        <exclusions>            <exclusion>                <groupId>org.springframework.cloud</groupId>                <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>            </exclusion>        </exclusions>    </dependency>    <!-- 引入SpringCloud LoadBalancer的依赖,注意首先需要在父maven项目中引入SpringCloud的版本管理器 -->    <dependency>        <groupId>org.springframework.cloud</groupId>        <artifactId>spring-cloud-starter-loadbalancer</artifactId>    </dependency></dependencies>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在引入SpringCloud LoadBalancer的依赖之前,需要在父maven项目中引入SpringCloud的版本管理器,最好不要自己直接指定版本,不然可能会造成版本冲突。

    <dependencyManagement>    <dependencies>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-dependencies</artifactId>            <version>${spring.cloud.version}</version>            <type>pom</type>            <scope>import</scope>        </dependency>    </dependencies></dependencyManagement>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

还需要把SpringCloud中的ribbon禁用掉,因为早期SpringCloud是没有负载均衡器的标准的,它把ribbon当做它的标准,所以之前版本的SpringCloud默认使用的负载均衡器ribbon,我们现在就需要禁用掉。 好像2021年版本的SpringCloud没有使用ribbon了

spring:  cloud:    loadbalancer:      ribbon:        enabled: false
  • 1
  • 2
  • 3
  • 4
  • 5

spring.cloud.loadbalancer.ribbon.enable设置为false

最后还需要在的配置类中加@LoadBalanced注解,这个注解ribbon也一样需要加

@Configurationpublic class RestConfig {    @Bean    @LoadBalanced    public RestTemplate restTemplate(RestTemplateBuilder builder){        RestTemplate restTemplate = builder.build();        return restTemplate;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

现在就可以使用RestTemplate来进行测试调用服务了,LoadBalancer它默认的负载均衡器是RoundRobinLoadBalancer轮询。

如果要替换LoadBalancer默认的负载均衡机制其实和修改Ribbon的方式差不多,只不过Ribbon是往容器中添加一个IRule的对象,而LoadBalancer是往容器中添加ReactorLoadBalancer接口类型的对象,如下中的案例

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);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

然后在配置类或者主启动类中使用@LoadBalancerClient注释

@Configuration@LoadBalancerClients({  @LoadBalancerClient(value = "stores", configuration = StoresLoadBalancerClientConfiguration.class),    	      	@LoadBalancerClient(value = "aaa", configuration = CustomersLoadBalancerClientConfiguration.class)})public class MyConfiguration {    @Bean    @LoadBalanced    public WebClient.Builder loadBalancedWebClientBuilder() {        return WebClient.builder();    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发