以 Invoker 为中心,从 Cluster, Directory, Router, LoadBalance,来解析各个接口。
Directory
目录服务Directory, 代表多个Invoker, 可以看成List
Directory的接口定义
|
|
StaticDirectory
静态目录服务,很明显是不会动态变化的,主要用于服务对多注册中心的引用。如何理解呢?假如我们配置了多注册中心
|
|
注意: 注册中心后面加上default=”false”是说默认情况下服务不被注册到该中心。上面配置中demoService显现的指定了2个注册中心,所以会被注册到2个注册中心,而demoService2是默认的,所以只会注册到hangzhouRegistry。
我们启动跟踪代码,发现StaticDirectory(如何知道StaticDirectory在哪里使用,可以先全局搜索,再打上断点)
在ReferenceConfig中createProxy使用
|
|
|
|
RegistryDirectory
注册目录服务, 它的Invoker集合是从注册中心获取的, 它实现了NotifyListener接口,也是RegistryDirectory能根据注册中心动态变化的根源所在。
|
|
我们看到重要的一行,在这里都是读它,那么在哪里写它的呢?就是在回调NotifyListener接口notify方法。
|
|
|
|
|
|
我们追溯发现RegistryDirectory的notify被AbstractRegistry的notify方法调用,而AbstractRegistry的notify方法在FailbackRegistry,ZookeeperRegistry,MulticastRegistry三者中使用,由于我们用的zookeeper,所以查看ZookeeperRegistry。
|
|