ribbon自定义负载规则

原创 Laughing  2020-03-19 21:30  阅读 9 次 评论 0 条

选择哪个服务器进行请求处理,由 ILoadBalancer接口的chooseServer方法决定。在 BaseLoadBalancer类中 ,则使用IRule接口的choose方法来决定选择哪一个服务器对象。如果想自定义负载均衡规定,可以编写一个IRule接口的实现类。

接口实现类

  1. package org.lisen.first.ribbon.client.configuration;  
  2.   
  3. import com.netflix.loadbalancer.ILoadBalancer;  
  4. import com.netflix.loadbalancer.IRule;  
  5. import com.netflix.loadbalancer.Server;  
  6.   
  7. import java.util.List;  
  8.   
  9. public class RibbonRule implements IRule {  
  10.   
  11.     ILoadBalancer iLoadBalancer;  
  12.   
  13.     @Override  
  14.     public Server choose(Object o) {  
  15.         List<Server> serverList = iLoadBalancer.getAllServers();  
  16.         return serverList.get(0);  
  17.     }  
  18.   
  19.     @Override  
  20.     public void setLoadBalancer(ILoadBalancer iLoadBalancer) {  
  21.         this.iLoadBalancer = iLoadBalancer;  
  22.     }  
  23.   
  24.     @Override  
  25.     public ILoadBalancer getLoadBalancer() {  
  26.         return this.iLoadBalancer;  
  27.     }  
  28. }  

调用

  1. package org.lisen.first.ribbon.client;  
  2.   
  3. import com.netflix.client.ClientException;  
  4. import com.netflix.client.ClientFactory;  
  5. import com.netflix.client.http.HttpRequest;  
  6. import com.netflix.client.http.HttpResponse;  
  7. import com.netflix.config.ConfigurationManager;  
  8. import com.netflix.loadbalancer.BaseLoadBalancer;  
  9. import com.netflix.loadbalancer.ILoadBalancer;  
  10. import com.netflix.loadbalancer.Server;  
  11. import com.netflix.niws.client.http.RestClient;  
  12. import org.lisen.first.ribbon.client.configuration.RibbonRule;  
  13. import org.springframework.boot.SpringApplication;  
  14. import org.springframework.boot.autoconfigure.SpringBootApplication;  
  15.   
  16. import java.util.ArrayList;  
  17. import java.util.List;  
  18.   
  19. @SpringBootApplication  
  20. public class FirstRibbonClientApplication {  
  21.   
  22.     public static void main(String[] args) throws Exception {  
  23. //        请求服务器  
  24. //        ConfigurationManager.getConfigInstance().setProperty(  
  25. //                "my-client.ribbon.listOfServers",  
  26. //                "localhost:7777,localhost:9000"  
  27. //        );  
  28.         BaseLoadBalancer iLoadBalancer = new BaseLoadBalancer();  
  29.         iLoadBalancer.setRule(new RibbonRule());  
  30.         List<Server> serverList = new ArrayList<>();  
  31.         serverList.add(new Server("localhost",7777));  
  32.         serverList.add(new Server("localhost",9000));  
  33.         iLoadBalancer.addServers(serverList);  
  34. //        获取restClient  
  35. //        RestClient restClient = (RestClient) ClientFactory.getNamedClient("my-client");  
  36.         HttpRequest request = HttpRequest.newBuilder().uri("/person/lisen").build();  
  37.         for(int i=0;i<6;i++){  
  38.            Server server = iLoadBalancer.chooseServer(null);  
  39.            System.out.println(server.getHostPort());  
  40.         }  
  41.         SpringApplication.run(FirstRibbonClientApplication.class, args);  
  42.     }  
  43.   
  44. }  
本文地址:https://www.lisen.me/ribbon-custom-load-rules.html
版权声明:本文为原创文章,版权归 木子网 所有,欢迎分享本文,转载请保留出处!

发表评论


表情