当前位置:   article > 正文

springcloud入门基础搭建之ribbon_ribbon配置

ribbon配置

目录

1.ribbon使用

2.切换负载均衡算法

2.1注册负载均衡算法

2.2自定义负载均衡算法

传送门


1.ribbon使用

        父项目版本详见:https://blog.csdn.net/bfss_11/article/details/119056522

        涉及到的文件

        

        在前一篇搭建eureka服务过程中,实际已经使用到了ribbon。因为在eureka中已经包含了ribbon相关依赖,所以不需要额外引入ribbon依赖。

下面为eureka依赖,已包含ribbon相关

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  4. <exclusions>
  5. <exclusion>
  6. <groupId>javax.servlet</groupId>
  7. <artifactId>servlet-api</artifactId>
  8. </exclusion>
  9. </exclusions>
  10. </dependency>

        使用:

        在resttemplate上添加@LoadBalanced启动负重均衡,默认采用轮询算法

  1. @Bean
  2. @LoadBalanced
  3. public RestTemplate restTemplate() {
  4. return new RestTemplate();
  5. }

2.切换负载均衡算法

2.1注册负载均衡算法

 spring-cloud-starter-netflix-eureka-client  2.2.9.RELEASE及之前的版本 

通过@Bean方式注册随机算法。类名上需要添加@Configuration

  1. package com.zy.config;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. import com.netflix.loadbalancer.IRule;
  5. import com.netflix.loadbalancer.RandomRule;
  6. @Configuration
  7. public class MyRule {
  8. @Bean
  9. IRule myRandomRule() {
  10. return new RandomRule();
  11. }
  12. }

2.2自定义负载均衡算法

      

        继承AbstractLoadBalancerRule。

        该算法思路为:每个服务调用3次,示例如下。

  1. package com.zy.config;
  2. import java.util.List;
  3. import org.apache.commons.collections4.CollectionUtils;
  4. import com.netflix.client.config.IClientConfig;
  5. import com.netflix.loadbalancer.AbstractLoadBalancerRule;
  6. import com.netflix.loadbalancer.ILoadBalancer;
  7. import com.netflix.loadbalancer.Server;
  8. public class MyLoadBalancer extends AbstractLoadBalancerRule {
  9. private int total = 0;// 调用了几次
  10. private int currentIndex = 0;// 当前调用者
  11. @Override
  12. public Server choose(Object key) {
  13. return choose(getLoadBalancer(), key);
  14. }
  15. private Server choose(ILoadBalancer lb, Object key) {
  16. if (lb == null) {
  17. return null;
  18. }
  19. List<Server> reachableServers = lb.getReachableServers();
  20. if (CollectionUtils.isEmpty(reachableServers)) {
  21. return null;
  22. }
  23. Server server = null;
  24. if (total < 3) {
  25. server = reachableServers.get(currentIndex);
  26. total++;
  27. } else {
  28. total = 1;
  29. currentIndex++;
  30. if (currentIndex >= reachableServers.size()) {
  31. currentIndex = 0;
  32. }
  33. server = reachableServers.get(currentIndex);
  34. }
  35. return server;
  36. }
  37. @Override
  38. public void initWithNiwsConfig(IClientConfig clientConfig) {
  39. // TODO Auto-generated method stub
  40. }
  41. }

        注册该负载均衡算法

3.0.0及之后的版本负载均衡算法继承自ReactorLoadBalancer

  1. @Bean
  2. ReactorLoadBalancer<ServiceInstance> myRandomLoadBalancer(Environment environment,
  3. LoadBalancerClientFactory loadBalancerClientFactory) {
  4. String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
  5. return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class),
  6. name);
  7. }

传送门

  1. springcloud入门基础搭建之组件版本
  2. springcloud入门基础搭建之eureka
  3. springcloud入门基础搭建之ribbon
  4. springcloud入门基础搭建之feign
  5. springcloud入门基础搭建之hystrix
  6. springcloud入门基础搭建之zuul
  7. springcloud入门基础搭建之config
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/934572
推荐阅读
相关标签
  

闽ICP备14008679号