yingCallerInterceptorFactory(conf)).build();
this.rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf, interceptor, this.stats);
this.backoffPolicy = ClientBackoffPolicyFactory.create(conf);
}ConnectionManager.nonceGenerator = new PerClientRandomNonceGenerator();//每个客户端随机的NonceGEnerator,主要是为了生成clientid
stats = ServerStatisticTracker.create(conf);创建跟踪该connection所相关的region 信息监控实例
this.asyncProcess = createAsyncProcess(this.conf);创建一个同步进程实例,该进程主要负责持续的请求流
this.interceptor = (new RetryingCallerInterceptorFactory(conf)).build();//远程服务器出现故障时,进行处理的机制
this.rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf, interceptor, this.stats);//RpcRetryingCaller创建工厂
this.backoffPolicy = ClientBackoffPolicyFactory.create(conf);//这个实际没有具体的的类实现 到此结束了下面的那个构造函数,接下来我们回过头来看看上面的构造函数的剩余部分:
同样的我们也就只是分析一些关键步骤:
this.registry = setupRegistry();//用于获取集群的基本信息例如clusterid以及region location的meta数据
this.rpcClient = RpcClientFactory.createClient(this.conf, this.clusterId); //负责IPC调用相关
this.rpcControllerFactory = RpcControllerFactory.instantiate(conf);//
至此客户端的启动结束了,这里其实主要是启动两个服务,
一个是用于request处理的AsyncProcess
一个是用于获取服务器信息的Registry
还有就是负责RPC调用的RpcClient,相关主要类图如下:

 
|