springcloudnetflixribbonLoadBalance之ServerListFilter

编程

用处: 筛选出合适的server 。

 

拿ZonePreferenceServerListFilter 说事,因为实际使用的是这个。

注入bean,    在RibbonClientConfiguration 定义。

@Bean

@ConditionalOnMissingBean

@SuppressWarnings("unchecked")

public ServerListFilter<Server> ribbonServerListFilter(IClientConfig config) {

if (this.propertiesFactory.isSet(ServerListFilter.class, name)) {

return this.propertiesFactory.get(ServerListFilter.class, config, name);

}

ZonePreferenceServerListFilter filter = new ZonePreferenceServerListFilter();

filter.initWithNiwsConfig(config);

return filter;

}

 

 

 

 

 

@Data

@EqualsAndHashCode(callSuper = false)

public class ZonePreferenceServerListFilter extends ZoneAffinityServerListFilter<Server> {

private String zone;

@Override

public void initWithNiwsConfig(IClientConfig niwsClientConfig) {

super.initWithNiwsConfig(niwsClientConfig);

if (ConfigurationManager.getDeploymentContext() != null) {

this.zone = ConfigurationManager.getDeploymentContext().getValue(

ContextKey.zone);

}

}

@Override

public List<Server> getFilteredListOfServers(List<Server> servers) {

List<Server> output = super.getFilteredListOfServers(servers);

if (this.zone != null && output.size() == servers.size()) {

List<Server> local = new ArrayList<Server>();

for (Server server : output) {

if (this.zone.equalsIgnoreCase(server.getZone())) {

local.add(server);

}

}

if (!local.isEmpty()) {

return local;

}

}

return output;

}

}

 

优先选择zone相同的server 。   网上有理解说zone 指的是机房,优先调用同机房server 。

 

ZoneAffinityServerListFilter   不太好理解,    基于ZoneStats和ServerStats做出选择。

 

ServerStats  见博客  https://my.oschina.net/qidis/blog/4386690 , 是Filter 和 Rure 的基础。

 

 

 

 

 

 

以上是 springcloudnetflixribbonLoadBalance之ServerListFilter 的全部内容, 来源链接: utcz.com/z/518891.html

回到顶部