Ribbon之ServerList
生活随笔
收集整理的这篇文章主要介绍了
Ribbon之ServerList
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
ServerList是存数服务实例的对象。
ServerList
StaticServerList
通过静态配置来维护服务列表。
public class StaticServerList<T extends Server> implements ServerList<T> {private final List<T> servers;public StaticServerList(T... servers) {this.servers = Arrays.asList(servers);}@Overridepublic List<T> getInitialListOfServers() {return servers;}@Overridepublic List<T> getUpdatedListOfServers() {return servers;} }AbstractServerList
ServerList拦截器,被LoadBalancer使用。
ConfigurationBasedServerList
通过配置文件参数listOfservers,来实现ServerList.多个用逗号分隔。
public class ConfigurationBasedServerList extends AbstractServerList<Server> {private IClientConfig clientConfig;@Overridepublic List<Server> getInitialListOfServers() {return getUpdatedListOfServers();}@Overridepublic List<Server> getUpdatedListOfServers() {String listOfServers = clientConfig.get(CommonClientConfigKey.ListOfServers);return derive(listOfServers);}@Overridepublic void initWithNiwsConfig(IClientConfig clientConfig) {this.clientConfig = clientConfig;}protected List<Server> derive(String value) {List<Server> list = Lists.newArrayList();if (!Strings.isNullOrEmpty(value)) {for (String s: value.split(",")) {list.add(new Server(s.trim()));}}return list;} }- DiscoveryEnabledNIWSServerList
通过Eureka的服务发现,实现的ServerList.
public class DiscoveryEnabledNIWSServerList extends AbstractServerList<DiscoveryEnabledServer>{@Overridepublic List<DiscoveryEnabledServer> getInitialListOfServers(){return obtainServersViaDiscovery();}@Overridepublic List<DiscoveryEnabledServer> getUpdatedListOfServers(){return obtainServersViaDiscovery();}private List<DiscoveryEnabledServer> obtainServersViaDiscovery() {List<DiscoveryEnabledServer> serverList = new ArrayList<DiscoveryEnabledServer>();if (eurekaClientProvider == null || eurekaClientProvider.get() == null) {logger.warn("EurekaClient has not been initialized yet, returning an empty list");return new ArrayList<DiscoveryEnabledServer>();}EurekaClient eurekaClient = eurekaClientProvider.get();if (vipAddresses!=null){for (String vipAddress : vipAddresses.split(",")) {// if targetRegion is null, it will be interpreted as the same region of clientList<InstanceInfo> listOfInstanceInfo = eurekaClient.getInstancesByVipAddress(vipAddress, isSecure, targetRegion);for (InstanceInfo ii : listOfInstanceInfo) {if (ii.getStatus().equals(InstanceStatus.UP)) {if(shouldUseOverridePort){if(logger.isDebugEnabled()){logger.debug("Overriding port on client name: " + clientName + " to " + overridePort);}// copy is necessary since the InstanceInfo builder just uses the original reference,// and we don't want to corrupt the global eureka copy of the object which may be// used by other clients in our systemInstanceInfo copy = new InstanceInfo(ii);if(isSecure){ii = new InstanceInfo.Builder(copy).setSecurePort(overridePort).build();}else{ii = new InstanceInfo.Builder(copy).setPort(overridePort).build();}}DiscoveryEnabledServer des = new DiscoveryEnabledServer(ii, isSecure, shouldUseIpAddr);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;}}转载于:https://blog.51cto.com/881206524/2145823
总结
以上是生活随笔为你收集整理的Ribbon之ServerList的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Flutter React编程范式实践
- 下一篇: Confluence 6 启用远程 AP