一、Dubbo服务发布
dubbo的服务提供者注册一共经历以下三个阶段
1) 配置
Dubbo 框架在服务注解这个后置处理器(ServiceAnnotationPostProcessor)中,利用扫描器,把含有 @DubboService 注解的类对应的 Bean 定义收集到了一块,并且再次创建一个新的 ServiceBean 类型的 Bean 定义(类似spring源码中的definition),把 @DubboService 注解的所有配置全部转移到了ServiceBean 的 Bean 定义中
2)导出
a.本地导出
为何通过我们可以通过接口就可以远程调用呢,有经验的小伙伴看到这种场景一定能想到一个词-动态代理,而本地导出核心原理就是将生成的 Invoker 代理类缓存到了InjvmProtocol 中的 exporterMap 成员变量中,具体的用处可以理解为暴露在一个JVM里面,不用通过调用ZK来进行远程通信。例如:在同一个服务,在自己调用自己的接口,就没必要进行网络IP连接来通信
b.远程导出
远程导出首先从传进来的 Invoker 代理对象中,取出注册注册中心地址,并且从注册中心地址中取出 registry 属性值得到 zookeeper 值,生成了一个以 zookeeper 为协议的新 registryUrl 地址。然后是doLocalExport 方法,主要是开启本地 Dubbo 协议端口的 Netty 服务。最后,从 registryUrl 中,根据 zookeeper 获取到 ZookeeperRegistry,并且,把构建好的提供方接口服务地址,写到 Zookeeper 注册中心服务去,Dubbo 框架采用 Netty 网络通信框架,进行了端口服务的绑定
3)注册
用了 CuratorFramework 框架的类来向 Zookeeper 写数据。其实就是利用 Zookeeper 客户端,往 Zookeeper 服务端写了一条数据,即创建了一个文件目录而已,这就是服务注册的底层核心原理
整体流程总结如下:
二、Dubbo服务消费
更新中...