日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Ribbon之ServerList

發布時間:2025/3/19 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ribbon之ServerList 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ServerList是存數服務實例的對象。

  • ServerList

public?interface?ServerList<T?extends?Server>?{public?List<T>?getInitialListOfServers();/***?Return?updated?list?of?servers.?This?is?called?say?every?30?secs*?(configurable)?by?the?Loadbalancer's?Ping?cycle*?*/public?List<T>?getUpdatedListOfServers();???}
  • 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使用。

public?abstract?class?AbstractServerList<T?extends?Server>?implements?ServerList<T>,?IClientConfigAware?{???/***?Get?a?ServerListFilter?instance.?It?uses?{@link?ClientFactory#instantiateInstanceWithClientConfig(String,?IClientConfig)}*?which?in?turn?uses?reflection?to?initialize?the?filter?instance.?*?The?filter?class?name?is?determined?by?the?value?of?{@link?CommonClientConfigKey#NIWSServerListFilterClassName}*?in?the?{@link?IClientConfig}.?The?default?implementation?is?{@link?ZoneAffinityServerListFilter}.*/public?AbstractServerListFilter<T>?getFilterImpl(IClientConfig?niwsClientConfig)?throws?ClientException{try?{String?niwsServerListFilterClassName?=?niwsClientConfig.getProperty(CommonClientConfigKey.NIWSServerListFilterClassName,ZoneAffinityServerListFilter.class.getName()).toString();AbstractServerListFilter<T>?abstractNIWSServerListFilter?=?(AbstractServerListFilter<T>)?ClientFactory.instantiateInstanceWithClientConfig(niwsServerListFilterClassName,?niwsClientConfig);return?abstractNIWSServerListFilter;}?catch?(Throwable?e)?{throw?new?ClientException(ClientException.ErrorType.CONFIGURATION,"Unable?to?get?an?instance?of?CommonClientConfigKey.NIWSServerListFilterClassName.?Configured?class:"+?niwsClientConfig.getProperty(CommonClientConfigKey.NIWSServerListFilterClassName),?e);}} }
  • 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。