SpringCloud(12):LoadBalance:自定义负载均衡算法

迷南。 2023-01-11 09:10 177阅读 0赞

一、切换随机负载均衡

  1. 查看源码可以看到ReactiveLoadBalancer接口下有两个实现。随机和轮询。
  2. ![20210126185021611.png][]

(1)切换RandomLoadBalancer,编写配置类:

  1. package com.buba.loadbalancer;
  2. import org.springframework.cloud.client.ServiceInstance;
  3. import org.springframework.cloud.loadbalancer.core.RandomLoadBalancer;
  4. import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer;
  5. import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
  6. import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.core.env.Environment;
  9. /**
  10. * 客户端负载均衡配置
  11. */
  12. public class CustomLoadBalancerConfiguration {
  13. @Bean
  14. ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
  15. LoadBalancerClientFactory loadBalancerClientFactory) {
  16. String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
  17. return new RandomLoadBalancer(loadBalancerClientFactory
  18. .getLazyProvider(name, ServiceInstanceListSupplier.class),
  19. name);
  20. }
  21. }

(2)@LoadBalancerClients注解设置默认配置文件

  1. package com.buba.springcloud.config;
  2. import com.buba.loadbalancer.CustomLoadBalancerConfiguration;
  3. import org.springframework.cloud.client.loadbalancer.LoadBalanced;
  4. import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
  5. import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8. import org.springframework.web.client.RestTemplate;
  9. /**
  10. * @Configuration 相当于applicationContext.xml
  11. */
  12. @Configuration
  13. @LoadBalancerClients(defaultConfiguration = {CustomLoadBalancerConfiguration.class})
  14. public class ConfigBean {
  15. /**
  16. * @return
  17. * @LoadBalanced 配置负载均衡到RestTemplate
  18. * 把RestTemplate对象交给Spring管理
  19. */
  20. @Bean
  21. @LoadBalanced
  22. public RestTemplate getRestTemplate() {
  23. return new RestTemplate();
  24. }
  25. }

(3)启动测试

  1. 重复访问[http://localhost/consumer/dept/list][http_localhost_consumer_dept_list],可以看到数据随机从某个服务提供者中获取:

20210126202836669.png

发表评论

表情:
评论列表 (有 0 条评论,177人围观)

还没有评论,来说两句吧...

相关阅读

    相关 LoadBalance负载均衡【1】

    一、前言 第一次听说负载均衡是在大三,当时对这个没有太大的兴趣,到后来大四找工作面试,也零星的听别人提起过一些,可能因为是校招吧,对现在流行的技术了解的不是很多,到现在工