转载:https://blog.csdn.net/u013160932/article/details/79337292
暴露服务的过程中,会涉及到两个Protocol
- DubboProtocol主要是做网络通信相关初始化
- RegistryProtocol主要是做zk的注册和订阅相关
DubboProtocol的export方法,里面会调用openServer()启动NETTY。
(在RegistryProtocol里的doLocalExport()方法会去启动netty服务)。
走RegistryProtocol的export方法,里面的doLocalExporter会走进DubboProtocl里面启动netty,然后再注册注册中心。
启动的netty轻量服务端server的作用:后面的消费端从众多invoker中取得了一个后发送请求到这个server里,然后去执行
还有一个injvm,如果配置的话是不会启动netty的,用来做本地调用
注册中心的ZookeeperRegistry有两个父类,所以ZookeeperRegistry会先调用父类的构造方法,这个过程主要做了几件事:
3. 加载服务缓存文件(AbstractRegistry)
4. 异步(默认)更新缓存文件(AbstractRegistry)
5. 定时重试失败的动作:注册失败,取消注册失败,订阅失败,取消订阅失败,通知失败(FailbackRegistry)
6. 初始化zk通信相关(ZookeeperRegistry)
关于走注册中心的流程;
暴露:export()方法,先RegistryProtocol的export(),然后DubboProtocol的export()来启动server.
引用:refer()方法,也是先RegistryProtocol的refer(),然后DubboProtocol的refer()来连接server获取client。
中间会注册订阅等操作。