如何理解Ribbon中的ServerList
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,今天就跟大家聊聊有关如何理解Ribbon中的ServerList,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。ServerList是存数服务实
千家信息网最后更新 2025年12月02日如何理解Ribbon中的ServerList
今天就跟大家聊聊有关如何理解Ribbon中的ServerList,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
ServerList是存数服务实例的对象。
ServerList
public interface ServerList{ public List getInitialListOfServers(); /** * Return updated list of servers. This is called say every 30 secs * (configurable) by the Loadbalancer's Ping cycle * */ public List getUpdatedListOfServers(); }
StaticServerList
通过静态配置来维护服务列表。
public class StaticServerListimplements ServerList { private final List servers; public StaticServerList(T... servers) { this.servers = Arrays.asList(servers); } @Override public List getInitialListOfServers() { return servers; } @Override public List getUpdatedListOfServers() { return servers; }}
AbstractServerList
ServerList拦截器,被LoadBalancer使用。
public abstract class AbstractServerListimplements ServerList , 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 getFilterImpl(IClientConfig niwsClientConfig) throws ClientException{ try { String niwsServerListFilterClassName = niwsClientConfig .getProperty( CommonClientConfigKey.NIWSServerListFilterClassName, ZoneAffinityServerListFilter.class.getName()) .toString(); AbstractServerListFilter abstractNIWSServerListFilter = (AbstractServerListFilter ) 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{ private IClientConfig clientConfig; @Override public List getInitialListOfServers() { return getUpdatedListOfServers(); } @Override public List getUpdatedListOfServers() { String listOfServers = clientConfig.get(CommonClientConfigKey.ListOfServers); return derive(listOfServers); } @Override public void initWithNiwsConfig(IClientConfig clientConfig) { this.clientConfig = clientConfig; } protected List derive(String value) { List 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{ @Override public List getInitialListOfServers(){ return obtainServersViaDiscovery(); } @Override public List getUpdatedListOfServers(){ return obtainServersViaDiscovery(); } private List obtainServersViaDiscovery() { List serverList = new ArrayList (); if (eurekaClientProvider == null || eurekaClientProvider.get() == null) { logger.warn("EurekaClient has not been initialized yet, returning an empty list"); return new ArrayList (); } 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 client List 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 system InstanceInfo 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; }}
看完上述内容,你们对如何理解Ribbon中的ServerList有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
内容
服务
配置
参数
多个
实例
对象
文件
更多
知识
篇文章
维护服务
行业
资讯
资讯频道
逗号
静态
频道
拦截器
进一
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
棋牌游戏服务器设置
两列对比 录入第三列数据库
镇江java软件开发招聘信息
方舟生存进化非专用服务器和单人
dell服务器报cpu0000
wed软件开发
医院服务器维护
山西pdu服务器电源哪里便宜
网络安全专项治理总结2019
网络安全应急指挥中心简介
运维服务器搭建
网络数据库课程设计购物车程序
口腔内窥镜软件开发
数据库实现路径查询
网络安全要注意图片
科技改变生活 互联网
数据库删除行语法
广东惠发互联网信息科技有限公司
九阴真经服务器
应用软件开发实训
用友系统服务器管理
dbf数据库怎么用
2b2t服务器是什么国家的
盘锦软件开发报价多少
软件开发技术工程师待遇
下载数据库大全
末日血战360服务器
中国海外能源基建项目的数据库
博兴供应链软件开发服务
我的世界怎么查服务器神兽刷新率