ribbon源码之ServerListChangeListener

Posted

tags:

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

ServerListChangeListener

  用来监听负载均衡器的服务器列表变化。

public interface ServerListChangeListener {
    /**
     * 当 BaseLoadBalancer的server列表变化时被调用。
     */
    public void serverListChanged(List<Server> oldList, List<Server> newList);
}

  通过BaseLoadBalancer的addServerListChangeListener和removeServerListChangeListener方法来增加和删除ServerListChangeListener监听器。

private List<ServerListChangeListener> changeListeners = new CopyOnWriteArrayList<ServerListChangeListener>();
...
public void addServerListChangeListener(ServerListChangeListener listener) {
        changeListeners.add(listener);
    }
    
    public void removeServerListChangeListener(ServerListChangeListener listener) {
        changeListeners.remove(listener);
    }
....

  当BaseLoadBalancer的Server列表发生变化时,调用注册的ServerListChangeListener监听器。

 public void setServersList(List lsrv) {
 ...

            boolean listChanged = false;
            if (!allServerList.equals(allServers)) {
                listChanged = true;
                if (changeListeners != null && changeListeners.size() > 0) {
                   List<Server> oldList = ImmutableList.copyOf(allServerList);
                   List<Server> newList = ImmutableList.copyOf(allServers);                   
                   for (ServerListChangeListener l: changeListeners) {
                       try {
                           l.serverListChanged(oldList, newList);
                       } catch (Exception e) {
                           logger.error("LoadBalancer [{}]: Error invoking server list change listener", name, e);
                       }
                   }
                }
            }
...
}

 

以上是关于ribbon源码之ServerListChangeListener的主要内容,如果未能解决你的问题,请参考以下文章

ribbon源码之获取服务列表

ribbon源码之负载均衡算法

ribbon源码之ServerListChangeListener

ribbon源码之IPingStrategy

ribbon源码之Client

ribbon源码之客户端