《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 http://www.iocoder.cn/Dubbo/Admin/ 「芋道源码」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

1. 概述

Dubbo AdminDubbo管理控制台,主要三部分功能:

界面

  • 服务查询
  • 服务治理(包括 Dubbo 2.7 版本新增的治理规则)
  • 服务测试

Dubbo Admin 采用前端后分离的方式开发:

项目结构

既可以按照标准的 Maven 方式进行打包与部署,也可以采用前后端分离的部署方式,方便开发。

2. 快速入门

本小节,我们来部署一个 Dubbo Admin 控制台,并对 Dubbo 服务进行管理。

友情提示:如果胖友想要使用 Docker 部署 Dubbo Admin 控制台,可以看看 https://hub.docker.com/r/apache/dubbo-admin

2.1 部署 Dubbo Admin

因为 Dubbo Admin 并未提供已经编译好的 jar 包,所以我们需要自己动手。

① 执行 git clone https://github.com/apache/dubbo-admin.git 命令,将项目下载到本地。

友情提示:如果网络比较“差”,可能需要一些时间哈。

② 修改 dubbo-admin-server/src/main/resources/application.properties 配置文件,主要是指定配置中心。内容如下:

# Dubbo 各种中心的配置
# centers in dubbo2.7
admin.registry.address=zookeeper://127.0.0.1:2181
admin.config-center=zookeeper://127.0.0.1:2181
admin.metadata-report.address=zookeeper://127.0.0.1:2181

# Dubbo Admin 管理员配置
admin.root.user.name=root
admin.root.user.password=root

# Dubbo 分组相关配置
admin.registry.group=dubbo
admin.config-center.group=dubbo
admin.metadata-report.group=dubbo

admin.apollo.token=e16e5cd903fd0c97a116c873b448544b9d086de9
admin.apollo.appId=test
admin.apollo.env=dev
admin.apollo.cluster=default
admin.apollo.namespace=dubbo

这里我们使用本地的 ZooKeeper 做为注册中心,所以无需更改。如果胖友使用远程的 ZooKeeper 服务,需要修改如下三个配置项:

  • admin.registry.address注册中心地址。
  • admin.config-center配置中心地址。
  • admin.metadata-report.address元数据中心地址。

友情提示:建议胖友参考《芋道 ZooKeeper 极简入门》文章,安装一个本地的 ZooKeeper 服务,和本文更加搭配。

另外,考虑到安全性,建议修改 admin.root.user.nameadmin.root.user.password 配置项,设置成自己想要的管理员账号与密码。

③ 执行 mvn clean package -Dmaven.test.skip=true 命令,开始构建 Dubbo Admin 项目。

友情提示:如果网络比较“差”,可能需要一些时间哈。

另外,添加 -Dmaven.test.skip=true 参数的原因是,貌似当前版本单元测试有点问题,老报连接不上 ZooKeeper 服务。

④ 执行如下命令,启动 Dubbo Admin 控制台。

# 进入构建输出目录
$ cd dubbo-admin-distribution/target/

# 启动 Dubbo Admin 控制台
# 注意,-0.2.0-SNAPSHOT 是根据版本来的,胖友记得看看噢。
$ java -jar dubbo-admin-0.2.0-SNAPSHOT.jar

⑤ 使用浏览器,访问 http://127.0.0.1:8080/#/login 地址,进入 Dubbo Admin 登录界面。如下图所示:

Dubbo Admin 登录界面

使用默认的「root/root」账号密码进行登录。登录成功后,进入 Dubbo Admin 首页。如下图所示:

Dubbo Admin 首页

2.2 启动 Dubbo 服务

《芋道 Spring Boot Dubbo 入门》「3. 注解配置」小节,我们搭建了一个 Dubbo 示例项目 lab-30-dubbo-annotations-demo。如下图所示:

Dubbo 示例项目

下面,我们使用 Dubbo Admin 将该 Dubbo 示例项目进行管理。

① 执行 ProviderApplication 启动服务提供者,执行 ConsumerApplication 启动服务消费者

② 点击 Dubbo Admin 的「服务查询」菜单,可以查看到 UserRpcService 服务。如下图所示:

服务查询 - 列表

点击 UserRpcService 的「详情」按钮,可以看到 UserRpcService 服务的基础信息、服务信息(提供者 + 消费者列表)、元数据。如下图所示:

服务查询 - 详情

③ 点击 Dubbo Admin 的「服务统计 -> 服务关系」菜单,可以看到服务之间的调用关系。如下图所示:

服务统计 -> 服务关系

④ 点击 Dubbo Admin 的「服务统计 -> 服务统计」菜单,可以看 QPS、Response Time 等等统计信息。如下图所示:

服务统计 -> 服务统计

= = 不过艿艿测试总是在报错,所以这里就暂时不演示了。

3. Swagger 支持

Dubbo Admin 提供的 RESTful API 集成了 Swagger 组件,所以可以很方便的自动生成 API 文档。访问 http://127.0.0.1:8080/swagger-ui.html 地址,获得 Swagger 文档如下图所示:

Swagger 文档

4. 服务测试

在 Dubbo 2.7 版本开始提供服务的元数据,所以 Dubbo Admin 就可以用通过 Dubbo 泛化调用的特性,实现在控制台中,调用服务提供者进行测试。如下图所示:

服务测试 - 示例

下面,我们来详细介绍服务测试的使用过程。

4.1 接入元数据中心

使用服务测试的前提,是服务提供者需要接入元数据中心。以 user-rpc-service-provider-02 项目举例子,需要添加 dubbo.metadata-report.address 配置项。如下图所示:

配置文件

这里,我们还是采用 ZooKeeper 作为元数据中心。

修改完成后,重新执行 ProviderApplication 重启服务提供者。

4.2 使用流程

① 打开 Dubbo Admin 的「服务测试」菜单,输入服务名进行搜索。如下图所示:

服务测试 - 列表

② 点击 #get(...) 方法后面的「编辑」图标,进入该方法的测试界面。如下图所示:

服务测试 - 方法

③ 填写参数,点击「执行」按钮,进行一次服务提供者的调用。如下图所示:

服务测试 - 模拟测试

4.3 实现原理

胖友可以阅读《Dubbo Admin 服务测试功能》文章,进一步了解。

5. 服务 Mock

暂未开发,还在计划中…

服务 Mock

6. 服务治理

友情提示:如下内容,基于《Dubbo 文档 —— 服务治理和配置管理》做改造。

可以快速阅读,在有需要的时候,认真查看。

服务治理主要作用,是改变运行时服务的行为和选址逻辑,达到限流,权重配置等目的。主要有以下几个功能:

服务治理 —— 功能

6.1 应用级别的服务治理

在 Dubbo 2.6 及更早版本中,所有的服务治理规则都只针对服务粒度,如果要把某条规则作用到应用粒度上,需要为应用下的所有服务配合相同的规则、变更、删除的时候,也需要对应的操作,这样的操作很不友好。

因此 Dubbo 2.7 版本中增加了应用粒度的服务治理操作,对于条件路由(包括黑白名单)、动态配置(包括权重,负载均衡)都可以做应用级别的配置:

condition

上图是条件路由的配置,可以按照应用名、服务名两个维度来填写,也可以按照这两个维度来查询。

6.2 标签路由

标签路由是 Dubbo2.7 引入的新功能,配置以应用作为维度,给不同的服务器打上不同名字的标签,配置如下图所示:

tag

调用的时候,客户端可以通过 setAttachment 的方式,来设置不同的标签名称。比如本例中,setAttachment(tag1),客户端的选址范围就在如图所示的三台机器中,可以通过这种方式来实现流量隔离,灰度发布等功能。

6.3 条件路由

条件路由是 Dubbo 一直以来就有的功能,目前可以配置服务和应用两个维度,条件路由为 yaml 格式,具体的规则体以及各种适用场景,请参考这里

6.4 黑白名单

黑白名单是条件路由的一部分,规则存储和条件路由放在一起,为了方便配置所以单独拿出来,同样可以通过服务和应用两个维度,指定黑名单和白名单:

blackList

6.5 动态配置

动态配置是和路由规则平行的另一类服务治理治理功能,主要作用是在不重启服务的情况下,动态改变调用行为,从 Dubbo2.7 版本开始,支持服务和应用两个维度的配置,采用yaml格式,界面如下:
config 具体的规则体说明请参考这里

6.6 权重调节

权重调节是动态配置的子功能,主要作用是改变服务端的权重,更大的权重会有更大的几率被客户端选中作为服务提供者,从而达到流量分配的目的:

weight

6.7 负载均衡

负载均衡也是动态配置的子功能,主要作用是调整客户端的选址逻辑,目前可选的负载均衡策略有随机,轮训和最小活跃,关于各个策略的解释请参考这里

7. 配置管理

友情提示:如下内容,基于《Dubbo 文档 —— 服务治理和配置管理》做改造。

可以快速阅读,在有需要的时候,认真查看。

配置管理也是配合 Dubbo 2.7 新增的功能。在 Dubbo 2.7 中,增加了全局和应用维度的配置,分别在全局和应用范围内生效。其中,应用配置也可以指定该应用中的服务级别的配置,可以在控制台中查看,修改配置规则,默认展示全局维度的配置。

7.1 全局配置

config

全局配置里可以指定注册中心、元数据中心的地址,服务端和客户端的超时时间等,这些配置在全局内生效。除了配置写入,也可以用来查看。

如果使用 ZooKeeper 作为注册中心和元数据中心,还可以看到配置文件所在位置的目录结构。

7.2 应用、服务配置

appConfig

应用级别的配置可以为应用或者应用内的服务指定配置。在服务维度上,需要区分提供者和消费者。

  • dubbo.reference.{serviceName} 表示作为该服务消费者的配置
  • dubbo.provider.{servcieName}表示作为该服务提供者的配置。

其中注册中心和元数据中心的地址,只能在全局配置中指定,这也是 Dubbo 2.7 中推荐的使用方式。

并且,优先级:服务配置 > 应用配置 > 全局配置。

666. 彩蛋

暂无彩蛋,用就完事了!

文章目录
  1. 1. 1. 概述
  2. 2. 2. 快速入门
    1. 2.1. 2.1 部署 Dubbo Admin
    2. 2.2. 2.2 启动 Dubbo 服务
  3. 3. 3. Swagger 支持
  4. 4. 4. 服务测试
    1. 4.1. 4.1 接入元数据中心
    2. 4.2. 4.2 使用流程
    3. 4.3. 4.3 实现原理
  5. 5. 5. 服务 Mock
  6. 6. 6. 服务治理
    1. 6.1. 6.1 应用级别的服务治理
    2. 6.2. 6.2 标签路由
    3. 6.3. 6.3 条件路由
    4. 6.4. 6.4 黑白名单
    5. 6.5. 6.5 动态配置
    6. 6.6. 6.6 权重调节
    7. 6.7. 6.7 负载均衡
  7. 7. 7. 配置管理
    1. 7.1. 7.1 全局配置
    2. 7.2. 7.2 应用、服务配置
  8. 8. 666. 彩蛋