dubbo原理简介

dubbo 简介
1 dubbo是一种分布式服务框架以及SOA治理方案,使得应用可以通过高性能的RPC实现服务的输出和输入功能,可以和spring框架无缝集成。
2 dubbo的三大功能:

  • a 远程通信:支持多种通讯协议(http、dubbo协议、redis协议),透明化的远程调用,就像调用本地方法一样,只需要简单配置。
  • b 负载与容错:软负载均衡,失败容错。
  • c 服务的自我发现:基于注册中心目录服务,使服务消费方能够动态的查找服务提供方

3 dubbo架构图解析

  • Container 服务容器
  • Provider 服务提供方
  • Register 服务注册中心
  • Consumer 服务消费者
  • Monitor 服务监控
    大致的流程:服务提供者在容器中先启动start,然后注册到服务中心,消费者订阅服务(如果灭有订阅到自己想要的服务,
    注册中心发现后悔主动的推给消费者),调用提供者提供的服务。
    Monitor这是一个监控,消费者(Consumer)和提供者(Provider)会异步的方式发送消息至Monitor,
    Consumer和Provider会把信息保存到磁盘。此部分是可选的,Monitor功能需要单独配置,配置或者不配置,Monitor挂掉不会影响服务的使用。
    二:dubbo原理
    1、初始化过程细节
    上图中的第一步是start,就是讲服务装载在容器中,然后准备注册服务。和spring中启动过程类似,spring启动时,将bean装载近容器中的时候,
    首先要解析bean。所以dubbo也是先读取配置文件解析服务的。
    解析服务:
    a 基于dubbo.jar 内的Meta-inf/spring.handlers配置,spring在遇到dubbo空间时,会回调DubboNamedSpaceHandlers类
    b 所有的dubbo标签,都统一用DubboBeanDefinitionParser解析,基于一对一属性映射,将xml标签解析为bean对象。
    在serviceConfig.export或ReferenceConfig.get初始化时,将bean对象转化为url格式,将所有的bean属性转化为url的参数,然后将url传给protocol
    扩展点,基于扩展点的Adaptive机制,根据url的协议头,进行不同协议的服务暴露和引用。
    三、暴露服务
    1、只暴露服务端口
    在没有使用注册中心的情况,这种情况只使用在开发环境中,服务的调用和提供在同一个ip上,只要打开服务端口即可。
    当配置ServiceConfig解析出的URL的格式为:Dubbo://service-host/com.xxx.xxxService?version=1.0,基于拓展点的Adaptive机制通过url的
    Dubbo://协议头识别,直接调用DubboProtocol的export方法打开服务端口。
    2、向注册中心暴露服务
    和之前的区别:需要将服务的ip和port一起暴露给注册中心。
    ServiceConfig解析出的URL格式为:Register://Register-host/com.alibaba.dubbo.registry.RegistryService?export=URL.encode(Dubbo://service-host/com.xxx.xxxService?version=1.0)
    基于拓展点的Adaptive机制通过url的“register://”协议头识别,调用RegisterProtocol的export方法,将export参数中的url先注册到注册中心,在重新
    通过Protocol拓展点进行暴露:Dubbo://service-host/com.xxx.xxxService
    四、引用服务
    1、直接引用服务
    在没有注册中心的,直连提供者情况下ReferenceConfig解析出的URL格式为:Dubbo://service-host/com.xxx.TxxService?version=1.0.0
    基于拓展点的Adaptive机制,通过url的“dubbo://”协议头识别,直接调用DubboProtocol的refer方法,返回提供者使用。
    2、从注册中心发现引用服务:
    此时,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扩展点,伪装成单个提供这引用返回。

五、远程调用细节:
1 ServiceConfig类拿到对外服务的实际类ref,然后将ProxyFactory类getInvoker方法使用ref生成一个AbstractPrioxyInvoker实例,到这一步就完成了invoker的转化,接下来就是invoker转化为exporter的过程。
dubbo处理服务暴露的关键在于Invoker到exporter的转换过程,下面以Dubbo协议实现来进行说明
dubbo的实现:dubbo的invoker转换成exporter是发生在DubboProtocol类的export方法,它主要是打开socket侦听服务,并接收客户端发来的各种请求,
通讯细节有dubbo自己实现。
2 服务消费者消费一个服务的实现:
首先ReferenceConfig类的init方法调用Protocol的refer方法生成Invoker实例。接下来把Invoker转为客户端需要的接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值