一、服务端provider发布流程回顾
根据dubbo启动日志,provider的发布动作为以下几个步骤:
(1)暴露本地服务
Export dubbo service com.ywl.dubbo.TestApi to local registry, dubbo version: 2.0.0, current host: 127.0.0.1。
(2)暴露远程服务
Export dubbo service com.ywl.dubbo.TestApi to url dubbo://192.168.24.69:20880/com.ywl.dubbo.TestApi...后面省略。
(3)启动netty
Start NettyClient yuwenlei.local/192.168.24.69 connect to the server /192.168.1.100:20041, dubbo version: 2.0.0, current host: 192.168.24.69。
(4)打开zk
Opening socket connection to server dailyzk.webuy.ai/192.168.49.11:2181。
(5)注册provider服务到zk
Register dubbo service com.ywl.dubbo.TestApi url dubbo://192.168.24.69:20880/com.ywl.dubbo.TestApi? ...中间省略。
to registry registry://dailyzk.webuy.ai:7005/org.apache.dubbo.registry.RegistryService? ...后面省略。
(6)监听zk(订阅与通知)
Subscribe: provider://192.168.24.69:20880/com.ywl.dubbo.TestApi?...后面省略。
Notify urls for subscribe url provider://192.168.24.69:20880/com.ywl.dubbo.TestApi?...后面省略。
· 服务发布的目的
解析dubbo-provider.xml中的接口。将服务提供者向注册中心注册服务,以便服务消费者从注册中心查询并调用服务。
<dubbo:service interface="com.ywl.dubbo.TestApi" ref="testApi" retries="0" cluster="failfast" timeout="3000"/>
上篇文章已经提到zookeeper是如何被初始化与连接的,这一篇主要分析下dubbo服务是如何在zookeeper上进行节点创建与他们的订阅关系。
二、dubbo节点如何创建在zookeeper
创建dubbo节点是建立在远程服务暴露的源码基础上:
public <T> Exporter<T> export(final Invoker<T> originInvoker) throws RpcException {
//暴露远程服务 final ExporterChangeableWrapper<T> exporter = doLocalExport(originInvoker); URL registryUrl = getRegistryUrl(originInvoker); //初始化注册信息、连接zk
final Registry registry = getRegistry(originInvoker); //注册服务 - 即在注册中心创建dubbo服务节点
register(registryUrl, registeredProviderUrl);
//...
}
public void register(URL registryUrl, URL registedProviderUrl) {