亲宝软件园·资讯

展开

Dubbo之服务暴露

ytao丨杨滔 人气:1
![](https://img2020.cnblogs.com/other/1850167/202003/1850167-20200321113334029-1603461641.png) # 前言 本文 Dubbo 使用版本`2.7.5` Dubbo 通过使用`dubbo:service`配置或`@service`在解析完配置后进行服务暴露,供服务消费者消费。 Dubbo 的服务暴露有两种: - 远程暴露 - 本地暴露 可以通过`scope `显式指定暴露方式: - none 不暴露 - remote 远程暴露 - local 本地暴露 # 服务暴露流程 下面是一个服务暴露的流程图: ![](https://img2020.cnblogs.com/other/1850167/202003/1850167-20200321113334262-1859890876.jpg) **ProxyFactory** 是动态代理,用来创建 Invoker 对象,实现代理使用`JavassistProxyFactory`和`JdkProxyFactory`。 **Invoker** 是一个服务对象实例,Dubbo 框架的实体域。它可以是一个本地的实现,一个远程的实现或一个集群的实现,可以向它发起 Invoker 调用。 **Protocol** 是服务域,负责 Invoker 的生命周期管理,是 Invoker 暴露和引用的主要功能入口,对应该类的`export`和`refer`方法。 **Exporter** 是根据不同协议暴露 Invoker 进行封装的类,它会根据不同的协议头进行识别(比如:`registry://`和`dubbo://`),调用对应`XXXProtocol`的`export()`方法。 从上图中可以看到,Dubbo 中服务暴露分为两个大步骤:第一步通过代理将服务实例转换成 Invoker,这就是通过我们常用的反射实现。第二步将 Invoker 根据具体的协议转换成 Exporter,这是就是我们要分析的核心。从这里可以看到 Dubbo 服务对象都是围绕 Invoker 进行工作。 # 远程暴露 服务远程暴露从字面上理解,就是将服务跨网络进行远程通信,并非同一 JVM 中的服务进行调用。 服务最后都是转换成`org.apache.dubbo.config.spring.ServiceBean`,它的UML类图: ![](https://img2020.cnblogs.com/other/1850167/202003/1850167-20200321113334445-241942270.png) `ServiceBean`继承自`ServiceConfig`,服务在`ServiceConfig#doExportUrls`根据不同协议进行暴露。 ![](https://img2020.cnblogs.com/other/1850167/202003/1850167-20200321113334630-2006530680.png) 通过获取所有注册中心实例(registryURLs)后,进行依次暴露,暴露操作在`doExportUrlsFor1Protocol`中。 ```java private void doExportUrlsFor1Protocol(ProtocolConfig protocolConfig, List

加载全部内容

相关教程
猜你喜欢
用户评论