com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList Maven / Gradle / Ivy
/*
*
* Copyright 2013 Netflix, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.netflix.niws.loadbalancer;
import java.util.ArrayList;
import java.util.List;
import com.netflix.appinfo.InstanceInfo;
import com.netflix.appinfo.InstanceInfo.InstanceStatus;
import com.netflix.client.config.CommonClientConfigKey;
import com.netflix.client.config.IClientConfig;
import com.netflix.config.ConfigurationManager;
import com.netflix.discovery.DiscoveryClient;
import com.netflix.discovery.DiscoveryManager;
import com.netflix.loadbalancer.AbstractServerList;
/**
* Class to hold a list of servers that NIWS RestClient can use
* @author stonse
*
*/
public class DiscoveryEnabledNIWSServerList extends AbstractServerList{
String clientName;
String vipAddresses;
boolean isSecure = false;
boolean prioritizeVipAddressBasedServers = true;
String datacenter;
@Override
public void initWithNiwsConfig(IClientConfig clientConfig) {
this.clientName = clientConfig.getClientName();
vipAddresses = clientConfig.resolveDeploymentContextbasedVipAddresses();
isSecure = Boolean.parseBoolean(""+clientConfig.getProperty(CommonClientConfigKey.IsSecure, "false"));
prioritizeVipAddressBasedServers = Boolean.parseBoolean(""+clientConfig.getProperty(CommonClientConfigKey.PrioritizeVipAddressBasedServers, prioritizeVipAddressBasedServers));
datacenter = ConfigurationManager.getDeploymentContext().getDeploymentDatacenter();
}
@Override
public List getInitialListOfServers(){
return obtainServersViaDiscovery();
}
@Override
public List getUpdatedListOfServers(){
return obtainServersViaDiscovery();
}
private List obtainServersViaDiscovery() {
List serverList = new ArrayList();
DiscoveryClient discoveryClient = DiscoveryManager.getInstance()
.getDiscoveryClient();
if (discoveryClient == null) {
return new ArrayList();
}
if (vipAddresses!=null){
for (String vipAddress : vipAddresses.split(",")) {
List listOfinstanceInfo = discoveryClient
.getInstancesByVipAddress(vipAddress, isSecure);
for (InstanceInfo ii : listOfinstanceInfo) {
if (ii.getStatus().equals(InstanceStatus.UP)) {
DiscoveryEnabledServer des = new DiscoveryEnabledServer(ii, isSecure);
des.setZone(DiscoveryClient.getZone(ii));
serverList.add(des);
}
}
if (serverList.size()>0 && prioritizeVipAddressBasedServers){
break; // if the current vipAddress has servers, we dont use subsequent vipAddress based servers
}
}
}
return serverList;
}
public String getVipAddresses() {
return vipAddresses;
}
public void setVipAddresses(String vipAddresses) {
this.vipAddresses = vipAddresses;
}
public String toString(){
StringBuilder sb = new StringBuilder("DiscoveryEnabledNIWSServerList:");
sb.append("; clientName:").append(clientName);
sb.append("; Effective vipAddresses:").append(vipAddresses);
sb.append("; isSecure:").append(isSecure);
sb.append("; datacenter:").append(datacenter);
return sb.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy