Spring Cloud Loadbalancer

Spring Cloud Loadbalancer—客户端负载均衡器

springcloud 2020.0.1 版本之后 删除了eureka中的ribbon,替代ribbon的是spring cloud自带的LoadBalancer,但公司开发中并没有那么快更新,大部分项目还是在用Ribbon,但未来可能会改用Spring Cloud Loadbalancer。我们一起来看一下Spring Cloud Loadbalancer的使用

整体使用方法同Ribbon

1.1 导入jar包

<dependency>
    <!-- Spring Cloud loadbalancer 负载均衡-->
    <groupid>org.springframework.cloud</groupid>
    <artifactid>spring-cloud-starter-loadbalancer</artifactid>
</dependency>

1.2 屏蔽ribbon

spring
  cloud:
    loadbalancer:
      ribbon:
        enabled: false
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
    return new RestTemplate();
}

1.4 调用(同Ribbon)

@RestController
public class UsersController {

    //&#x670D;&#x52A1;&#x63D0;&#x4F9B;&#x8005;&#x540D;&#x79F0;
    private static final String REMOTE_URL = "http://SEARCH";

    @Autowired
    private  RestTemplate restTemplate;

    @GetMapping("goods")
    public ResponseResult searchGoods()
    {
         return restTemplate.getForObject(REMOTE_URL+"/goods",ResponseResult.class);
    }
}

2.1 创建一个配置类

package com.test.eureka.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;

//&#x8FD9;&#x91CC; &#x4E0D;&#x9700;&#x8981; @configuration&#x6CE8;&#x89E3;  &#x91CD;&#x8981;&#x7684;&#x4E8B;&#x60C5;&#x8BF4;&#x4E09;&#x904D;
public class CustomLoadBalancerConfiguration {

    @Bean
    ReactorLoadBalancer<serviceinstance> randomLoadBalancer(Environment environment,
                                                            LoadBalancerClientFactory loadBalancerClientFactory) {
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);

        //&#x8FD9;&#x91CC;&#x662F;&#x8FD4;&#x56DE;&#x968F;&#x673A;&#x8D1F;&#x8F7D;&#x5747;&#x8861;&#x65B9;&#x5F0F;
        return new RandomLoadBalancer(loadBalancerClientFactory
                .getLazyProvider(name, ServiceInstanceListSupplier.class),
                name);
    }
}
</serviceinstance>

2.2 添加注解

在@LoadBalanced注解所在类上添加注解

@LoadBalancerClient(name = "SEARCH",configuration = CustomLoadBalancerConfiguration.class)
@Configuration
//&#x6CE8;&#x610F;&#x8FD9;&#x91CC;&#x7684;name&#x5C5E;&#x6027; &#x9700;&#x8981;&#x548C;eureka&#x9875;&#x9762;&#x4E2D;&#x7684;&#x670D;&#x52A1;&#x63D0;&#x4F9B;&#x8005;&#x540D;&#x5B57;&#x4E00;&#x76F4; &#x6B64;&#x65F6;&#x9875;&#x9762;&#x4E2D;&#x662F;&#x5927;&#x5199;
@LoadBalancerClient(name = "SEARCH",configuration = CustomLoadBalancerConfiguration.class)
public class RemoteClientConfiguration {

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

}

2.3其它不变,重新测试即可

Original: https://www.cnblogs.com/daimenglaoshi/p/16884925.html
Author: 呆萌老师
Title: Spring Cloud Loadbalancer

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/714237/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球