ServerListUpdater
动态更新ServerListUpdater的执行策略。核心方法是start,updateAction参数是更新的具体方法。
void start(UpdateAction updateAction);
PollingServerListUpdater
是ServerListUpdater的一个实现类,内部使用ScheduledThreadPoolExecutor来执行更新ServerList操作。
@Override public synchronized void start(final UpdateAction updateAction) { if (isActive.compareAndSet(false, true)) { final Runnable wrapperRunnable = new Runnable() { @Override public void run() { if (!isActive.get()) { if (scheduledFuture != null) { scheduledFuture.cancel(true); } return; } try { updateAction.doUpdate(); lastUpdated = System.currentTimeMillis(); } catch (Exception e) { logger.warn("Failed one update cycle", e); } } }; scheduledFuture = getRefreshExecutor().scheduleWithFixedDelay( wrapperRunnable, initialDelayMs, refreshIntervalMs, TimeUnit.MILLISECONDS ); } else { logger.info("Already active, no-op"); } }
ServerList
获取serverlist的接口。getInitialListOfServers获取初始的servers;getUpdatedListOfServers获取更新的servers。
public List<T> getInitialListOfServers(); public List<T> getUpdatedListOfServers();
ConfigurationBasedServerList
ServerList的一个实现类,从配置文件中获取server list。
@Override public List<Server> getInitialListOfServers() { return getUpdatedListOfServers(); } @Override public List<Server> getUpdatedListOfServers() { String listOfServers = clientConfig.get(CommonClientConfigKey.ListOfServers); return derive(listOfServers); } 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; }
ServerListFilter
定义对获取的server list进行过滤。
public List<T> getFilteredListOfServers(List<T> servers);
ZoneAffinityServerListFilter
ServerListFilter的一个实现类。
时间: 2024-10-10 08:36:56