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编程范式实践
- 下一篇: Linux入门——文件管理