Dubbo 是什么
Apache Dubbo 是一个易于使用、高性能的 WEB 和 RPC 框架,具有内置的服务发现、流量管理、可观察性、安全功能、工具和构建企业级微服务的最佳实践。
Dubbo 是阿里巴巴推出的,多年来一直在成功支持数十亿的服务。

Dubbo 的原理和机制
Dubbo 的原理和机制包括了几个方面,有架构、框架、核心功能、核心组件、调用流程,我们可以通过这几个方面介绍 Dubbo 的原理和机制。
Dubbo 的架构图
图中的左侧是为消费者提供的接口;图中的右侧是为提供者提供的接口;中间是两边所需要用到的接口。

Dubbo 的框架
Dubbo 的框架,设计了十层。分别是服务接口层(Service)、配置层(Config)、服务代理层(Proxy)、服务注册层(Registry)、集群层(Cluster)、监控层(Monitor)、远程调用层(Protocol)、信息交换层(Exchange)、网络传输层(Transport)和数据序列化层(Serialize)。
Dubbo 的核心功能
Dubbo 主要提供了四个核心的功能:
- Dubbo 可以远程地去调用方法;
- Dubbo 可以进行比较智能的容错;
- Dubbo 可以进行负载均衡;
- Dubbo 可以发现服务的注册;
Dubbo 的核心组件
Dubbo 的核心组件包括 Provider(生产者)、Consumer(消费者)、Registry(注册中心)、Monitor(监控)和Container(容器)。

Dubbo 的调用流程
- 服务提供者启动:服务提供者启动时,会将自己的服务注册到注册中心(如 ZooKeeper)上。
- 服务消费者启动:服务消费者启动时,会从注册中心上获取服务提供者的列表。
- 服务消费者发起调用请求:当服务消费者需要调用服务时,它会选择一个服务提供者进行调用。
- 负载均衡:Dubbo 提供了多种负载均衡算法(如随机、轮询等),用于从服务提供者列表中选择一个服务提供者进行调用。
- 服务调用:服务消费者通过网络向服务提供者发起调用请求,服务提供者接收到请求后,会根据请求的参数进行处理并返回结果。
- 结果返回:服务提供者将处理结果返回给服务消费者,服务消费者接收到结果后进行处理并返回给调用方。
- 服务提供者取消注册:当服务提供者关闭或者服务不可用时,它会将自己从注册中心上注销。
使用 Apifox 访问 Dubbo 服务
Dubbo 其实就是 RPC 的一种远程调用的方案,所以访问 Dubbo 服务,可类比为调用 RPC 的服务。我们需要使用 API 工具来进行接口的请求,今天我选择了 Apifox 来进行请求,因为它支持中文,且免费使用。
新建一个 Dubbo 项目
调试 Dubbo 接口前需要在 Apifox 中新建项目,并填写好对应的名称。

新建 Dubbo 接口
点击新建 Package 选项。

然后添加一个 Service。

调试 Dubbo 接口
先点击 Service 下某个方法的环境配置按钮。

然后配置并保存服务器地址。

发送一个 Dubbo 请求
接着我们到达运行页面,填入请求 body 的参数,例如:
{
"name": "user-name",
"age": 29
}
并且点击发送运行,得到 Dubbo 服务返回的数据。

关于 Apifox
- 集成了 API 文档、API 调试、API Mock、API 自动化测试 API 一体化协作平台
- 拥有更先进的 API 设计/开发/测试工具
- Apifox = Postman + Swagger + Mock + JMeter