如何理解Ribbon中的ServerList
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,今天就跟大家聊聊有关如何理解Ribbon中的ServerList,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。ServerList是存数服务实
千家信息网最后更新 2025年01月31日如何理解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安全错误
数据库的锁怎样保障安全
任天堂数据服务器
网络安全案例材料
access数据库lock
杭州速欣网络技术有限公司
网络安全是对网络系统的
网络安全大赛奖金很高吗
网络安全和信息化局的职能
北京服务器负载均衡厂家云空间
巨潮数据库官网入口
光缆及网络技术专业技术报告
幻塔怎么看服务器等级
自动化服务器应用技术
nsa网络安全武器库
网络安全事件恢复阶段
微信突然数据库修复
安悦网络科技招聘软件开发
阿里地区网络安全局长
江西银行软件开发中心官网
移动通信网络安全试题
中国网络安全防护中心
软件开发应该开展什么项目
求生之路服务器改名插件
介绍软件开发专业小短文
泗洪申久网络技术有限公司
环境科技评论收录于什么数据库
网络安全法实名认证身份证
河南授时服务器
网络安全支付风险提示
中国互联网科技界名人
宿迁市java软件开发招聘