3.1 Cluster 实现类分析

我们在上一章看到了两个概念,分别是集群接口 Cluster 和 Cluster Invoker,这两者是不同的。Cluster 是接口,而 Cluster Invoker 是一种 Invoker。服务提供者的选择逻辑,以及远程调用失败后的的处理逻辑均是封装在 Cluster Invoker 中。那么 Cluster 接口和相关实现类有什么用呢?用途比较简单,仅用于生成 Cluster Invoker。下面我们来看一下源码。

  1. public class FailoverCluster implements Cluster {
  2. public final static String NAME = "failover";
  3. @Override
  4. public <T> Invoker<T> join(Directory<T> directory) throws RpcException {
  5. // 创建并返回 FailoverClusterInvoker 对象
  6. return new FailoverClusterInvoker<T>(directory);
  7. }
  8. }

如上,FailoverCluster 总共就包含这几行代码,用于创建 FailoverClusterInvoker 对象,很简单。下面再看一个。

  1. public class FailbackCluster implements Cluster {
  2. public final static String NAME = "failback";
  3. @Override
  4. public <T> Invoker<T> join(Directory<T> directory) throws RpcException {
  5. // 创建并返回 FailbackClusterInvoker 对象
  6. return new FailbackClusterInvoker<T>(directory);
  7. }
  8. }

如上,FailbackCluster 的逻辑也是很简单,无需解释了。所以接下来,我们把重点放在各种 Cluster Invoker 上