本文共 1803 字,大约阅读时间需要 6 分钟。
cluster也是从rpc分出来的,包名叫com.alibaba.dubbo.rpc.cluster
也是rpc的一部分,从官方文档中可以看出
确定cluster 类型,从directory中获取注册信息,router根据规则来过滤list<Invoker> ,然后loadBalance 做负载,抽取 invoker
public interface Directoryextends Node { /** * get service type. * * @return service type. */ Class getInterface(); /** * list invokers. * * @return invokers */ List > list(Invocation invocation) throws RpcException; }
public interface Router extends Comparable{ /** * get the router url. * * @return url */ URL getUrl(); /** * route. * * @param invokers * @param url refer url * @param invocation * @return routed invokers * @throws RpcException */ List > route(List > invokers, URL url, Invocation invocation) throws RpcException;}
@SPI(FailoverCluster.NAME)public interface Cluster { /** * Merge the directory invokers to a virtual invoker. * * @param* @param directory * @return cluster invoker * @throws RpcException */ @Adaptive Invoker join(Directory directory) throws RpcException;}
确定下负载算法
@SPI(RandomLoadBalance.NAME)public interface LoadBalance { /** * select one invoker in list. * * @param invokers invokers. * @param url refer url * @param invocation invocation. * @return selected invoker. */ @Adaptive("loadbalance")Invoker select(List > invokers, URL url, Invocation invocation) throws RpcException;}