Dubbo 服务导出过程始于 Spring 容器发布刷新事件,Dubbo 在接收到事件后,会立即执行服务导出逻辑。整个逻辑大致可分为三个部分, 第一是前置工作,主要用于检查参数,组装 URL。 第二是导出服务,包含导出服务到本地 (JVM),和导出服务到远程两个过程。 第三是向注册中心注册服务,用于服务发现。
服务导出流程:
1、接收到ContextRefreshedEvent刷新事件,调用ServiceBean.export,会执行ServiceConfig.export方法
2、从配置中心获取参数,检查一些参数配置
3、检查是否需要导出、是否配置延迟导出条件判断
4、调用doExport导出
5、调用doExportUrls,loadRegistries加在注册中心配置,构造URL集合,遍历所有注册协议调用doExportUrlsFor1Protocol为每个协议每个注册中心导出
6、得到服务的URL,把URL作为参数添加到registryURL中,然后JavassistProxyFactory生成Invoker代理,在调用协议导出得到一个Export
7、调用RegistryProtocol进行导出,主要分为根据对应协议导出,创建NettyServer;获取注册中心实现类ZookeeperRegistry,调用create方法创建持久/临时节点
8、服务导出后得到一个Exporter,添加到exporters集合中
9、发布服务导出事件ServiceBeanExportedEvent