实现思路:
通过自定义负载均衡策略实现,以下为简单实现思路。
1:启动类增加
@Bean
@LoadBalanced //启用负载均衡机制
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Bean
public IRule ribbonRule() {
//随机负载均衡策略
return new IpUserHashRule();
}
2:实现自定义策略
public class IpUserHashRule extends AbstractLoadBalancerRule {
private static Logger log = LoggerFactory.getLogger(IpUserHashRule.class);
public Server choose(ILoadBalancer lb, Object key) throws UnknownHostException {
if (lb == null) {
log.warn("no load balancer");
return null;
}
Server serverNow = null;
List<Server> allServers1 = lb.getAllServers();
for(Server server:allServers1){
Server.MetaInfo metaInfo = server.getMetaInfo();
String appName = metaInfo.getAppName();
if("WANDER-V2".equals(appName)){
String host = server.getHost();
String localHost = InetAddress.getLocalHost().getHostAddress();
if(host.equals(localHost)){
serverNow = server;
break;
}
}else {
serverNow = server;
break;
}
}
return serverNow;
}
@SneakyThrows
@Override
public Server choose(Object key) {
return choose(getLoadBalancer(), key);
}
@Override
public void initWithNiwsConfig(IClientConfig clientConfig) {
}
}在这里插入代码片