ribbon源码之获取服务列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ribbon源码之获取服务列表相关的知识,希望对你有一定的参考价值。

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源码之获取服务列表的主要内容,如果未能解决你的问题,请参考以下文章

ribbon源码 载均衡算法

ribbon源码之概述

聊聊Ribbon源码解读之负载均衡

聊聊Ribbon获取服务列表和负载均衡策略

客户端负载均衡Ribbon之源码解析

ribbon源码之负载均衡算法