Dubbo之服务暴露

栏目: IT技术 · 发布时间: 4年前

内容简介:Dubbo 通过使用

Dubbo之服务暴露

前言

本文 Dubbo 使用版本 2.7.5

Dubbo 通过使用 dubbo:service 配置或 @service 在解析完配置后进行服务暴露,供服务消费者消费。

Dubbo 的服务暴露有两种:

  • 远程暴露

  • 本地暴露

可以通过 scope 显式指定暴露方式:

  • none 不暴露

  • remote 远程暴露

  • local 本地暴露

服务暴露流程

下面是一个服务暴露的流程图:

Dubbo之服务暴露

ProxyFactory是动态代理,用来创建 Invoker 对象,实现代理使用 JavassistProxyFactoryJdkProxyFactory

Invoker是一个服务对象实例,Dubbo 框架的实体域。它可以是一个本地的实现,一个远程的实现或一个集群的实现,可以向它发起 Invoker 调用。

Protocol是服务域,负责 Invoker 的生命周期管理,是 Invoker 暴露和引用的主要功能入口,对应该类的 exportrefer 方法。

Exporter是根据不同协议暴露 Invoker 进行封装的类,它会根据不同的协议头进行识别(比如: registry://dubbo:// ),调用对应 XXXProtocolexport() 方法。

从上图中可以看到,Dubbo 中服务暴露分为两个大步骤:第一步通过代理将服务实例转换成 Invoker,这就是通过我们常用的反射实现。第二步将 Invoker 根据具体的协议转换成 Exporter,这是就是我们要分析的核心。从这里可以看到 Dubbo 服务对象都是围绕 Invoker 进行工作。

远程暴露

服务远程暴露从字面上理解,就是将服务跨网络进行远程通信,并非同一 JVM 中的服务进行调用。服务最后都是转换成 org.apache.dubbo.config.spring.ServiceBean ,它的UML类图:

Dubbo之服务暴露

ServiceBean 继承自 ServiceConfig ,服务在 ServiceConfig#doExportUrls 根据不同协议进行暴露。

Dubbo之服务暴露

通过获取所有注册中心实例(registryURLs)后,进行依次暴露,暴露操作在 doExportUrlsFor1Protocol 中。

上面是代码片段为暴露服务的核心,可以看到 scope 由三个值控制是否暴露和远程或本地暴露,默认远程和本地都暴露。在远程调用中,分为 使用注册中心暴露直接暴露 (默认dubbo协议),它们之间的区别在url上:

  • 无注册中心:dubbo://192.168.3.19:20880/xxxx

  • 有注册中心: registry://127.0.0.1:2181/org.apache.dubbo.registry.RegistryService?application=provider&dubbo=2.0.2&export= dubbo://192.168.3.19:20880/xxxx

无注册中心的直接暴露服务。有注册中心的先创建注册中心,再得到 export 的服务地址,然后暴露服务,当服务暴露成功后把服务元数据注册到注册中心。

代码中 protocol#export 会根据服务 url 的请求头进行区分不同 XXXProtocol#export 的逻辑,比如。目前 Dubbo 中有以下几种:

Dubbo之服务暴露

本地暴露

同一个应用中,可能既要提供服务远程暴露给其他应用引用,也要给自身提供引用。如果只提供远程暴露的话,当自身应用需要引用自身的服务时,需要通过远程通信访问,那么这大大浪费网络资源。这是就需要用 injvm 协议暴露,就是我们所说的本地暴露,无需跨网络远程通信,可以更好的节省资源。通过上面代码中,我们知道本地暴露调用的是 ServiceConfig#exportLocal 方法。

Dubbo之服务暴露

本地暴露会指定 injvm 协议,并且 host 指定为本地 127.0.0.1 和端口号为0。protocol.export 调用 InjvmProtocol#export 实现:

export 中返回了 InjvmExporter 实例化对象。

本地暴露就比较简单,将 Invoker 直接保存在 InjvmExporter 的 exporterMap 中。

最后

本篇对 Dubbo 的服务暴露流程进行了分析,核心点就是开篇图中的得到 Invoker 后转化到 Export。其中更多详细的地方,由于展开后篇幅太大,不能一一写到,会在今后相关的 Dubbo 文章再进行讲解。

关注【ytao】,更多原创好文

Dubbo之服务暴露


以上所述就是小编给大家介绍的《Dubbo之服务暴露》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

GitHub入门与实践

GitHub入门与实践

[日] 大塚弘记 / 支鹏浩、刘斌 / 人民邮电出版社 / 2015-7 / 39.00元

本书从Git的基本知识和操作方法入手,详细介绍了GitHub的各种功能,GitHub与其他工具或服务的协作,使用GitHub的开发流程以及如何将GitHub引入到企业中。在讲解GitHub的代表功能Pull Request时,本书专门搭建了供各位读者实践的仓库,邀请各位读者进行Pull Request并共同维护。一起来看看 《GitHub入门与实践》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换