dubbo源码-服务抽象directory

directory为一个引用服务的抽象,内部维护了服务提供者列表以及服务的路由和更新功能,包含类如下:

 

 Directory是最上层接口,主要定义了三个基本接口:getInterface表示该directory对应的服务;list返回该directory可用的服务提供者列表;getConsumerUrl定义返回该directory的消费者,因为directory功能只会在消费端使用,所以这里维护了一个消费者信息。

AbstractDirectory维护了路由功能和消费者信息。

StaticDirectory很好理解,就是内部维护了一个静态的服务提供者列表。

DynamicDirectory和StaticDirectory的区别是内部维护的服务提供者列表是静态的还是动态更新的,StaticDirectory在创建时就定义好invoker list,DynamicDirectory内部会维护一个注册中心registry类,并且定义了订阅和取消订阅的方法,底层会使用registry进行服务订阅操作,并且DynamicDirectory还实现了NotifyListener接口,在执行订阅的时候还把自己的notify方法注册上去,这样在服务提供者有变更的时候就会执行notify方法去更新内部的服务提供者列表信息。

RegistryDirectory和ServicediscoveryRegistryDirectory是DynamicDirectory的子类,主要定义了具体notify的逻辑,区别是RegistryDirectory不光会更新服务提供者,还可以从注册中心拿配置和路由相关信息。

 

posted @ 2021-06-29 11:17  Birding  阅读(96)  评论(0编辑  收藏  举报