码迷,mamicode.com
首页 > 其他好文 > 详细

ribbon源码之获取服务列表

时间:2017-12-15 16:57:07      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:already   and   oid   isnull   mon   override   span   接口   one   

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的一个实现类。

ribbon源码之获取服务列表

标签:already   and   oid   isnull   mon   override   span   接口   one   

原文地址:http://www.cnblogs.com/zhangwanhua/p/8043775.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!