0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Dubbo解析及原理浅析

lhl545545 来源:电子发烧友网 2018-02-07 15:57 次阅读

一、Duboo基本概念解释

Dubbo是一种分布式服务框架。 Webservice也是一种服务框架,但是webservice并不是分布式的服务框架,他需要结合F5实现负载均衡。因此,dubbo除了可以提供服务之外,还可以实现软负载均衡。它还提供了两个功能Monitor 监控中心和调用中心。这两个是可选的,需要单独配置。

Dubbo的计数架构图如下:

Dubbo解析及原理浅析

我们解释以下这个架构图:

Consumer服务消费者,Provider服务提供者。Container服务容器。消费当然是invoke提供者了,invoke这条实线按照图上的说明当然同步的意思了,多说一句,在实际调用过程中,Provider的位置对于Consumer来说是透明的,上一次调用服务的位置(IP地址)和下一次调用服务的位置,是不确定的。这个地方就是实现了软负载。

服务提供者先启动start,然后注册register服务。

消费订阅subscribe服务,如果没有订阅到自己想获得的服务,它会不断的尝试订阅。新的服务注册到注册中心以后,注册中心会将这些服务通过notify到消费者。

Monitor这是一个监控,图中虚线表明Consumer 和Provider通过异步的方式发送消息至Monitor,Consumer和Provider会将信息存放在本地磁盘,平均1min会发送一次信息。Monitor在整个架构中是可选的(图中的虚线并不是可选的意思),Monitor功能需要单独配置,不配置或者配置以后,Monitor挂掉并不会影响服务的调用。

二、dubbo原理

本篇博客的内容总体上比较抽象,如果一个想马上使用dubbo的同学来说,读这篇博客效果不太好,本篇博客没有写怎么使用、配置dubbo,接下来,我再令写一篇dubbo入门包含demo的博客。

I、初始化过程细节:

上图中的第一步start,就是将服务装载容器中,然后准备注册服务。和Spring中启动过程类似,spring启动时,将bean装载进容器中的时候,首先要解析bean。所以dubbo也是先读配置文件解析服务。

解析服务:

1)、基于dubbo.jar内的Meta-inf/spring.handlers配置,spring在遇到dubbo名称空间时,会回调DubboNamespaceHandler类。

2)、所有的dubbo标签,都统一用DubboBeanDefinitionParser进行解析,基于一对一属性映射,将XML标签解析为Bean对象。

源码截图:

在ServiceConfig.export 或者ReferenceConfig.get 初始化时,将Bean对象转会为url格式,将所以Bean属性转成url的参数

然后将URL传给Protocol扩展点,基于扩展点的Adaptive机制,根据URL的协议头,进行不同协议的服务暴露和引用。

暴露服务:

a、 只暴露服务端口

在没有使用注册中心的情况,这种情况一般适用在开发环境下,服务的调用这和提供在同一个IP上,只需要打开服务的端口即可。

即,当配置 or

ServiceConfig解析出的URL的格式为:

Dubbo://service-host/com.xxx.TxxService?version=1.0.0

基于扩展点的Adaptiver机制,通过URL的“dubbo://”协议头识别,直接调用DubboProtocol的export()方法,打开服务端口。

b、向注册中心暴露服务:

和上一种的区别:需要将服务的IP和端口一同暴露给注册中心。

ServiceConfig解析出的url格式为:

registry://registry-host/com.alibaba.dubbo.registry.RegistryService?export=URL.encode(“dubbo://service-host/com.xxx.TxxService?version=1.0.0”)

基于扩展点的Adaptive机制,通过URL的“registry://”协议头识别,调用RegistryProtocol的export方法,将export参数中的提供者URL先注册到注册中心,再重新传给Protocol扩展点进行暴露:

Dubbo://service-host/com.xxx.TxxService?version=1.0.0

引用服务:

a、直接引用服务:

在没有注册中心的,直连提供者情况下,

ReferenceConfig解析出的URL格式为:

Dubbo://service-host/com.xxx.TxxService?version=1.0.0

基于扩展点的Adaptive机制,通过url的“dubbo://”协议头识别,直接调用DubboProtocol的refer方法,返回提供者引用。

b、从注册中心发现引用服务:

此时,ReferenceConfig解析出的URL的格式为:

registry://registry-host/com.alibaba.dubbo.registry.RegistryService?refer=URL.encode(“consumer://consumer-host/com.foo.FooService?version=1.0.0”)

基于扩展点的Apaptive机制,通过URL的“registry://”协议头识别,就会调用RegistryProtocol的refer方法,基于refer参数总的条件,查询提供者URL,如:

Dubbo://service-host/com.xxx.TxxService?version=1.0.0

基于扩展点的Adaptive机制,通过提供者URL的“dubbo://”协议头识别,就会调用DubboProtocol的refer()方法,得到提供者引用。

然后RegistryProtocol将多个提供者引用,通过Cluster扩展点,伪装成单个提供这引用返回。

三、远程调用细节:

服务提供者暴露一个服务的详细过程:

Dubbo解析及原理浅析

上图是服务提供者暴露服务的主过程:

首先ServiceConfig类拿到对外提供服务的实际类ref,然后将ProxyFactory类的getInvoker方法使用ref生成一个AbstractProxyInvoker实例,到这一步就完成具体服务到invoker的转化。接下来就是Invoker转换到Exporter的过程。

Dubbo处理服务暴露的关键就在Invoker转换到Exporter的过程,下面我们以Dubbo和rmi这两种典型协议的实现来进行说明:

Dubbo的实现:

Dubbo协议的Invoker转为Exporter发生在DubboProtocol类的export方法,它主要是打开socket侦听服务,并接收客户端发来的各种请求,通讯细节由dubbo自己实现。

Rmi的实现:

RMI协议的Invoker转为Exporter发生在RmiProtocol类的export方法,他通过Spring或Dubbo或JDK来实现服务,通讯细节由JDK底层来实现。

服务消费者消费一个服务的详细过程

Dubbo解析及原理浅析

上图是服务消费的主过程:

首先ReferenceConfig类的init方法调用Protocol的refer方法生成Invoker实例。接下来把Invoker转为客户端需要的接口

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Dubbo
    +关注

    关注

    0

    文章

    19

    浏览量

    3177
收藏 人收藏

    评论

    相关推荐

    域名解析是什么 为什么要进行域名解析

    什么是域名解析?相信很多之前没有接触过建站的人不了解什么是域名解析,也不知道具体有啥作用。比如我们在地址栏里输入“www.ipdatacloud.com”并点击回车,展示出来的就是IP数据
    的头像 发表于 11-22 10:12 162次阅读

    威廉希尔官方网站 科普 | 芯片设计中的LEF文件浅析

    威廉希尔官方网站 科普 | 芯片设计中的LEF文件浅析
    的头像 发表于 11-13 01:03 232次阅读
    威廉希尔官方网站
科普 | 芯片设计中的LEF文件<b class='flag-5'>浅析</b>

    dubbo3.0 服务导入导出原理

    容器启动完成事件 ContextRefreshedEvent,一旦接收到这个事件后,就会开始 Dubbo 的启动流程,就会执行 DefaultModuleDeployer 的
    的头像 发表于 11-04 15:01 134次阅读
    <b class='flag-5'>dubbo</b>3.0 服务导入导出原理

    ZCAN PRO解析的DBC Singal 起始位与XNET解析的起始位不同;解析的信号不符合大端逻辑

    上图中的DBC文件使用记事本打开,Data_Field信号,起始位为23,长度为48,大端方式存储;(按照这个方式存储,明显已经溢出) 上图为该信号在ZCANPRO软件中打开,解析的起始位为23
    发表于 10-18 13:53

    自动售货机MDB协议中文解析(六)MDB-RS232控制硬币器的流程和解析

    自动售货机MDB协议中文解析(六)MDB-RS232控制硬币器的流程和解析
    的头像 发表于 08-19 15:53 620次阅读
    自动售货机MDB协议中文<b class='flag-5'>解析</b>(六)MDB-RS232控制硬币器的流程和<b class='flag-5'>解析</b>

    labview CAN DBC加载解析程序

    labview CAN DBC加载解析程序
    发表于 08-18 11:42

    Dubbo源码浅析(一)—RPC框架与Dubbo

    一、什么是RPC 1.1 RPC概念 RPC,Remote Procedure Call 即远程过程调用,与之相对的是本地服务调用,即LPC(Local Procedure Call)。本地服务调用比较常用,像我们应用内部程序**(注意此处是程序而不是方法,程序包含方法)**互相调用即为本地过程调用,而远程过程调用是指在本地调取远程过程进行使用。 而RPC框架就是为了帮助我们在本地调用远程过程时,就像调用本地过程一样方便。 1.2 RPC与Http的关系 用一句话来总结就是: RPC是一种概念,http是一种协议,可以认
    的头像 发表于 08-16 15:18 729次阅读
    <b class='flag-5'>Dubbo</b>源码<b class='flag-5'>浅析</b>(一)—RPC框架与<b class='flag-5'>Dubbo</b>

    【电磁兼容标准解析分享】汽车电子零部件EMC标准解析---你应该了解和知道的细节(二)

    【电磁兼容标准解析分享】汽车电子零部件EMC标准解析---你应该了解和知道的细节(二)
    的头像 发表于 08-08 08:17 4975次阅读
    【电磁兼容标准<b class='flag-5'>解析</b>分享】汽车电子零部件EMC标准<b class='flag-5'>解析</b>---你应该了解和知道的细节(二)

    plc协议解析网关是什么

    PLC协议解析网关是一种专门用于工业自动化领域的设备,它的主要功能是实现不同通信协议之间的转换和解析,以便于不同类型的PLC、传感器、执行器等设备能够互相通信和数据交换。 在工业控制系统中,常常存在
    的头像 发表于 07-12 15:41 300次阅读
    plc协议<b class='flag-5'>解析</b>网关是什么

    浅析消防设备电源监控系统设计及应用

    浅析消防设备电源监控系统设计及应用 张颖姣 安科瑞电气股份有限公司 上海嘉定 201801 摘要 :消防设备电源监控系统在许多大型商场或公司中非常重要的,所以消防设备电源监控系统的良好运行和实现
    的头像 发表于 03-12 10:25 339次阅读
    <b class='flag-5'>浅析</b>消防设备电源监控系统设计及应用

    ArkTS语言基础类库-解析

    多线程并发,支持Worker线程和宿主线程之间进行通信,开发者需要主动创建和关闭Worker线程。 提供常见的[容器类库增、删、改、查]的能力。 提供XML、URL、URI构造和解析的能力。 XML
    发表于 02-20 16:44

    XML在HarmonyOS中的生成,解析与转换(下)

    一、XML 解析 对于以 XML 作为载体传递的数据,实际使用中需要对相关的节点进行解析,一般包括解析 XML 标签和标签值、解析 XML 属性和属性值、
    的头像 发表于 02-18 10:07 736次阅读

    浅析配电能源管理系统在钢铁行业的应用

    电子发烧友网站提供《浅析配电能源管理系统在钢铁行业的应用.docx》资料免费下载
    发表于 01-11 16:15 0次下载

    更快的tsv解析代码分享

    使用正则解析的正则表达式很简单, 这里直接给代码, 为了避免重复编译正则表达式和重新分配内存报错结果列表, 这里将她们作为参数传给解析函数.
    的头像 发表于 12-29 09:45 429次阅读
    更快的tsv<b class='flag-5'>解析</b>代码分享

    一种面向标识公共递归解析节点的数据安全加固策略

    摘要 :为解决工业互联网标识解析体系公共递归解析节点信息透明、缺乏隐私数据保护和身份权限管理等问题,提出了一种面向标识公共递归解析节点的数据安全加固策略。通过设计加密机制及细粒度权限查验机制,实现了标识
    的头像 发表于 12-26 11:27 677次阅读
    一种面向标识公共递归<b class='flag-5'>解析</b>节点的数据安全加固策略