dubbo

62 阅读3分钟

总体架构

image.png

image.png

调用关系

  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

注意点

  • 注册中心,服务提供者,服务消费者三者之间均为长连接
  • 注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者
  • 注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表

注册中心

Dubbo2 节点结构

image.png 流程:

  • 服务提供者启动时: 向 /dubbo/com.foo.BarService/providers 目录下写入自己的 URL 地址。
  • 服务消费者启动时: 订阅 /dubbo/com.foo.BarService/providers 目录下的提供者 URL 地址。并向 /dubbo/com.foo.BarService/consumers 目录下写入自己的 URL 地址
  • 监控中心启动时: 订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费者 URL 地址。
-   当提供者出现断电等异常停机时,注册中心能自动删除提供者信息
-   当注册中心重启时,能自动恢复注册数据,以及订阅请求
-   当会话过期时,能自动恢复注册数据,以及订阅请求
-   当设置 `<dubbo:registry check="false" />` 时,记录失败注册和订阅请求,后台定时重试
-   可通过 `<dubbo:registry username="admin" password="1234" />` 设置 zookeeper 登录信息
-   可通过 `<dubbo:registry group="dubbo" />` 设置 zookeeper 的根节点,不配置将使用默认的根节点。
-   支持 `*` 号通配符 `<dubbo:reference group="*" version="*" />`,可订阅服务的所有分组和所有版本的提供者

注解开发

@DubboService 注解

定义好 Dubbo 服务接口后,提供服务接口的实现逻辑,并用 @DubboService 注解标记,就可以实现 Dubbo 的服务暴露

@DubboReference 注解

@DubboReference 注解将自动注入为 Dubbo 服务代理实例

@EnableDubbo 注解

@EnableDubbo 注解必须配置,否则将无法加载 Dubbo 注解定义的服务,@EnableDubbo 可以定义在主类上

Spring Boot 注解默认只会扫描 main 类所在的 package,如果服务定义在其它 package 中,需要增加配置 EnableDubbo(scanBasePackages = {"org.apache.dubbo.springboot.demo.provider"})

功能

服务分组

@DubboService和 @DubboReference可以通过不同的group参数,来实现分组, 也可以通过配置参数来实现分组

服务分版本

可以通过version参数在 Dubbo 中为同一个服务配置多个版本 不需要区分版本通过*

RPC调用上下文

上下文中存放的是当前调用过程中所需的环境信息。所有配置信息都将转换为 URL 的参数

RpcContext 是一个 ThreadLocal 的临时状态记录器,当接收到 RPC 请求,或发起 RPC 请求时,RpcContext 的状态都会变化。比如:A 调 B,B 再调 C,则 B 机器上,在 B 调 C 之前,RpcContext 记录的是 A 调 B 的信息,在 B 调 C 之后,RpcContext 记录的是 B 调 C 的信息。