Dubbo服务调用过程、dubbo服务提供者暴露服务的主过程

Dubbo服务调用过程 

节点角色说明

  • Provider: 暴露服务的服务提供方。
  • Consumer: 调用远程服务的服务消费方。
  • Registry: 服务注册与发现的注册中心。
  • Monitor: 统计服务的调用次调和调用时间的监控中心。
  • Container: 服务运行容器。

调用关系说明

  • 0. 服务容器负责启动,加载,运行服务提供者。
  • 1. 服务提供者在启动时,向注册中心注册自己提供的服务。
  • 2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  • 3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  • 4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  • 5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
  • 在此基础上,使用ZooKeeper作为注册中心,通过之前的Demo实例(Spring Boot2整合Dubbo)演示整个过程。

    1、首先,启动服务提供者模块dubbo-provider。这时候,向注册中心注册自己提供的服务,也就是,在ZooKeeper上创建对应的临时子节点。

  • 在dubbo根节点下,会产生一个以接口名称命名的子节点,该节点为永久节点(因为接口名称不会经常变化)。接口节点下面,会有四个子节点,分别表示消费者、配置项、路由器、提供者。提供者节点下面,会有一个dubbo协议地址的子节点,这个节点就是我们启动服务容器时注册的服务了,如果还有其它的该接口实现类服务提供者,就会在同级目录再创建一个临时节点。为什么是临时节点呢?第一,服务提供者的地址是经常发生变化的;第二,如果提供者的服务器宕机了,跟ZooKeeper会话结束导致临时节点被删除,就可以自动通知注册了该节点事件监听的客户端。

  • 2、然后,启动服务消费者模块dubbo-consumer,这时候,向注册中心订阅自己所需的服务,也就是,获取ZooKeeper的对应目录子节点,然后保存到本地

  • 3、服务调用的时候,在本地的服务提供列表中,基于软负载(RPC框架基本上都提供了本地负载均衡功能) 算法,找到合适的服务,然后进行远程调用。如果调用失败,选择另一台服务进行调用,这是容错功能。

    Dubbo提供了多种负载均衡算法和容错采用措施提供配置。

dubbo服务提供者暴露服务的主过程:
首先 ServiceConfig 类拿到对外提供服务的实际类 ref(如:HelloWorldImpl),然后通过 ProxyFactory 类的 getInvoker 方法使用 ref 生成一个 AbstractProxyInvoker 实例,到这一步就完成具体服务到 Invoker 的转化。
接下来就是 Invoker 转换到 Exporter 的过程
Dubbo 处理服务暴露的关键就在 Invoker 转换到 Exporter 的过程

服务发布过程的一些动作
  • 暴露本地服务
  • 暴露远程服务
  • 启动netty
  • 连接zookeeper
  • 到zookeeper注册
  • 监听zookeeper

一句话概括服务暴露:

Service->Invoker->Exporter

 在暴露服务的时候,要获取到invoker(下图getInvoker()),再用exporter来暴露执行器。Exporter会用两个,dubboExporter和registryExporter。DubboExporter来开启netty服务器,registryExporter用来注册,服务(执行器)和对应的url地址,注册到注册表里。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值