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的主要内容,如果未能解决你的问题,请参考以下文章