标签:localhost reload style key cti string 区域 nav balance
Ribbon 提供了几个负载均衡的组件,其目的就是让请求转给合适的服务器处理,因此,如何选择合适的服务器变成了负载均衡机制的核心,Ribbon 提供了如下负载均衡规则:
Ribbon 提供的负载规则基本可以满足大部分的需求,如果有更为复杂的要求,则可以自定义负载规则,如果需要实现自定义规则,需要实现 com.netflix.loadbalancer.IRule 接口,示例如下:
package org.lixue.ribbon.client;
import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.Server;
import java.util.List;
public class MyRule implements IRule{
private ILoadBalancer loadBalancer;
/**
*选择服务器
*/
public Server choose(Objectkey){
List<Server>allServers=loadBalancer.getAllServers();
if(allServers.size()>0){
//固定返回最后一个
return allServers.get(allServers.size()-1);
}else
return null;
}
public void setLoadBalancer(ILoadBalancerlb){
this.loadBalancer=lb;
}
public ILoadBalancer getLoadBalancer(){
returnthis.loadBalancer;
}
}
可以直接使用编码方式来设置负载规则,示例如下:
package org.lixue.ribbon.client;
import com.netflix.client.ClientFactory;
import com.netflix.config.ConfigurationManager;
import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.Server;
public class RibbonClient{
public static void main(String[]args)throws Exception{
ConfigurationManager.loadCascadedPropertiesFromResources("ribbon-client");
ILoadBalancerloadBalancer=ClientFactory.getNamedLoadBalancer("MyRibbonClient");
IRule chooseRule=new MyRule();
chooseRule.setLoadBalancer(loadBalancer);
for(int i=0;i<10;i++){
Server server=chooseRule.choose(null);
System.out.println("request"+server.getHostPort());
}
}
}
也可以使用配置的方式来设置负载规则,配置属性名 NFLoadBalancerRuleClassName ,配置值为自定义负载规则类的完整名称(命名空间和类名),修改 src/main/resources 目录下的 ribbon-client.properties 配置如下:
#配置服务器列表
MyRibbonClient.ribbon.listOfServers=localhost:8080,localhost:8002
#配置负载均衡规则IRule的实现类
MyRibbonClient.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.WeightedResponseTimeRule
#配置负载均衡实现类
MyRibbonClient.ribbon.NFLoadBalancerClassName=com.netflix.loadbalancer.ZoneAwareLoadBalancer
修改代码如下:
package org.lixue.ribbon.client;
import com.netflix.client.ClientFactory;
import com.netflix.config.ConfigurationManager;
import com.netflix.loadbalancer.*;
public class RibbonClient{
public static void main(String[]args)throwsException{
ConfigurationManager.loadCascadedPropertiesFromResources("ribbon-client");
ILoadBalancerloadBalancer=ClientFactory.getNamedLoadBalancer("MyRibbonClient");
for(inti=0;i<10;i++){
Serverserver=loadBalancer.chooseServer(null);
if(server!=null){
System.out.println("request"+server.getHostPort());
}
}
}
}
标签:localhost reload style key cti string 区域 nav balance
原文地址:https://www.cnblogs.com/li3807/p/8889597.html