一篇文章带你对dubbo admin知根知底

本篇主要介绍一下dubbo admin的使用,使用之前我们需要先进行搭建,对于如何搭建,参考 dubbo admin搭建。
如何使用 登录成功之后我们会看到如下界面,上面的服务就是我们注册中心注册上去的服务
一篇文章带你对dubbo admin知根知底
文章图片

在对应的服务上点击详情
一篇文章带你对dubbo admin知根知底
文章图片

此时我们就能看到对应服务的相关信息,很多时候如果你配置有问题是看不到这么多信息的,这里需要重点说明一下这个页面怎么出来元数据信息的。
元数据信息怎么显示
1)application.properties 配置文件要配置好配置中心
一篇文章带你对dubbo admin知根知底
文章图片

也就是上图中的 admin.config-center,其他两个就直接注释掉不配了,这一点dubbo官方也提到了
一篇文章带你对dubbo admin知根知底
文章图片

官方这里提到一点,需要在配置中心配置注册中心以及元数据中心地址,这点怎么做呢?我这里也说明一下(用的zookeeper)
1) 进入zookeeper安装目录的命令目录下,执行./zkCli.sh,登录到 zookeeper(如果你不是在本机的则需要制定ip和端口)
2) 创建 /dubbo/config/dubbo/dubbo.properties 节点,执行命令
create /dubbo/config/dubbo/dubbo.properties "",如果上一层目录不存在的,则一层层创建。
3) ctrl + c 或者执行quit退出zookeeper命令窗口,再执行

./zkCli.sh -server 127.0.0.1:2181 set /dubbo/config/dubbo/dubbo.properties "dubbo.registry.address=zookeeper://192.168.10.118:2181 dubbo.metadata-report.address=zookeeper://192.168.10.118:2181"

这里需要注意的是 dubbo.registry.address 和 dubbo.metadata-report.address 之间是要换行的,不然后面 dubbo-admin 是无法解析成功的。完成这几步,元数据信息如果还不显示,那还有一种可能:你使用的 dubbo 版本太低,我们这里介绍的 dubbo-admin 是基于dubbo 2.7.12版本的,去注册中心获取元数据信息的节点是 /dubbo/metadata/com.example.dubboprovider.rpc.CityService/provider/provider,如果你服务引用的版本是2.7.2之前的版本,它注册到的节点路径是 /dubbo/metadata/com.example.dubboprovider.rpc.CityService/provider/provider/service.data,这样就导致 dubbo-admin 获取不到元数据信息了。别问我怎么知道的,调出来的。
接口测试
有了元数据信息之后,我们就可以使用这个测试的功能了,虽然我们在 测试工具 这篇文章讲过其他的测试工具,但是其实 dubbo-admin 自带了测试功能。
找到对应的服务之后点击测试按钮
一篇文章带你对dubbo admin知根知底
文章图片

然后就会显示所有的接口
一篇文章带你对dubbo admin知根知底
文章图片

点击对应的接口进行测试
一篇文章带你对dubbo admin知根知底
文章图片

当然你也可以在这边进入测试页
一篇文章带你对dubbo admin知根知底
文章图片

接口文档(dubbo-api-docs)
在界面中,我们可以看到有一个接口文档的项
一篇文章带你对dubbo admin知根知底
文章图片

这个其实就是 dubbo-admin 使用了 dubbo-api-docs 的功能,这里说的使用并不是说直接引入对应的包,而是根据 dubbo-api-docs 暴露服务的规则来调用服务。
简单的介绍一下 dubbo-api-docs 原理:
其实就是暴露一个org.apache.dubbo.apidocs.core.providers.IDubboDocProvider接口,看下源码
一篇文章带你对dubbo admin知根知底
文章图片

对于使用 dubbo-api-docs(基于2.7.8.1版本),这里需要注意几点:
  • dubbo版本需要在2.7.7以上,不然不支持DubboService注解
  • 配置文件中一定要配置ApplicationConfigRegistryConfigProtocolConfig,需要在application.properties 中配置,其他地方比如 dubbo.properties 中配置会启动出错,暂时还没找到具体原因(后面会再看下)
    对于具体的使用,官方写得比较详细了,参考 dubbo-api-docs使用。
    dubbo-api-docs介绍到这,继续看接口文档功能使用,目前是直连模式直接去提供者取的,所以填入提供者的ip和端口(后续据说会支持去注册中心拿),点击加载接口列表
    一篇文章带你对dubbo admin知根知底
    文章图片

    这里有个点要注意:dubbo-admin 默认调 dubbo-api-docs 时会带上版本号 v1 以及 group 值apiDocsGroup,而我们服务提供者并没有,这样会导致调用失败,所以可以在 application.properties 中加配置设置为空值或者你自己需要的值
    一篇文章带你对dubbo admin知根知底
    文章图片

    点击服务之后就会出现服务接口
    一篇文章带你对dubbo admin知根知底
    文章图片

    点击接口之后右边就会出现相应的接口信息
    一篇文章带你对dubbo admin知根知底
    文章图片

    配置管理
    我们知道dubbo是支持配置中心的,这个配置管理其实就是对于配置中心的管理。
    一篇文章带你对dubbo admin知根知底
    文章图片

    默认是搜索 global,也就是全局的配置,这里以 zookeeper 为例,对应的节点路径是 /dubbo/config/dubbo/dubbo.properties来存全局配置。
    一篇文章带你对dubbo admin知根知底
    文章图片

    这个路径是不是很熟悉?没错,就是上面介绍元数据怎么来的时候配置过的节点,这个就是对那个配置的管理,我们看下里面的数据
    一篇文章带你对dubbo admin知根知底
    文章图片

    接着我们来创建一个配置,大概如下
    一篇文章带你对dubbo admin知根知底
    文章图片

    这里的应用名其实就是一个节点路径的key,存储格式为/dubbo/config/dubbo/{key}/dubbo.properties,所以我们这个结果最终保存到zk的这个节点下,我们在zk中也能看到
    一篇文章带你对dubbo admin知根知底
    文章图片

    然后搜索一下刚创建的配置信息
    一篇文章带你对dubbo admin知根知底
    文章图片

    服务统计
    服务统计其实就是一个监控的功能,会对服务的 qps、rt 等进行统计展示,这个版本目前功能还不是很完善
    一篇文章带你对dubbo admin知根知底
    文章图片

    服务关系先来看简单的服务关系,这个比较简单,就是基于服务全名(包名全路径)来关联消费者和提供者,不多做介绍。
    一篇文章带你对dubbo admin知根知底
    文章图片

    服务统计这里又涉及到 dubbo 版本了,dubbo 在 2.7.2 开始才提供了度量指标的功能,服务统计功能在这个版本目前应该是无法使用的,我在github上已经提了 issue,其实个人感觉完全可以将 metrics 集成到 monitor(后面会单独再介绍一下 dubbo monitor ),这里再说一下dubbo admin其实还是需要自己维护,社区也并不活跃,虽然目前这个功能是有问题的,还是介绍一下如何使用。
    1) dubbo 服务配置 metrics 内容,主要就是端口号和协议就行了,如果这里不配协议,默认是dubbo
    一篇文章带你对dubbo admin知根知底
    文章图片

    2) 服务配置,消费端同理
    一篇文章带你对dubbo admin知根知底
    文章图片

    3) 发一次dubbo调用,促进生成 MetricsService
    4) 在dubbo admin中输入Ip发起查询
    一篇文章带你对dubbo admin知根知底
    文章图片

    如果配置都正确的情况下,这里会提示 service not fund 的异常,具体原因可以看上面提的issue,但是我看网上还是有些人能用一部分服务统计功能的(除了线程池),如果你发现你能用服务统计功能,那请留言探讨。
    服务mock
    这个功能暂时也没有实现
    服务治理
    这是一个大头,放在最后压轴,这个版本的dubbo admin都是基于配置中心来管理的,所以前提是要配置好配置中心,内容也比较多,我们也一点一点介绍。
    条件路由先解释下什么是条件路由:基于 消费端条件 => 提供端条件 的规则对消费端的请求进行路由。具体的规则以及实现机制,推荐看下这篇 Dubbo 路由机制的实现。从代码中没看到配置和读取rule的逻辑,所以目前应该只能通过注册中心通知机制来触发条件路由,这里说说怎么使用dubbo admin来创建
    一篇文章带你对dubbo admin知根知底
    文章图片

    上面就是创建的一个规则,对于服务级别的,dubbo admin 会记录到节点 dubbo/config/dubbo/com.example.dubboprovider.rpc.CityService::.condition-router 中,com.example.dubboprovider.rpc.CityService:: 是默认生成的id,规则是 service: version: group。如果是应用级别,则是 dubbo/config/dubbo/consumer.condition-router,id就是应用名。设置成功之后,我们可以看到zk中有了
    一篇文章带你对dubbo admin知根知底
    文章图片

    然后消费端会收到对应的通知
    一篇文章带你对dubbo admin知根知底
    文章图片

    可以看到这是一个路由规则的节点通知,当然如果你配置了配置中心,则在org.apache.dubbo.rpc.cluster.router.condition.config.ListenableRouter#process这里收到通知。
    根据服务名配置路由对应代码中的ServiceRouter,根据应用配置路由对应代码中的AppRouter,核心逻辑还是在他们的父类ListenableRouter中触发,匹配的规则在对象的matches变量中存放,不匹配的在mismatches中存放。
    需要注意:2.7版本之后需要配置配置中心才行
    标签路由标签路由,顾名思义就是根据标签进行路由,我们可以通过标签给对服务节点进行分组,然后在客户端打标签,将客户端的请求限定在标签对应分组的节点之中。它的原理和条件路由一样,也是需要通过管理平台配置来回调更新客户端的router规则。对应的是TagRouter。来看下怎么用
    1) 先给服务端打标签分组
    一篇文章带你对dubbo admin知根知底
    文章图片

    2) 创建好之后,会在 dubbo/config/dubbo/provider.tag-router 路径下创建节点,可以看到已经有了
    一篇文章带你对dubbo admin知根知底
    文章图片

    3) 在消费者端打上要走的标签
    @DubboReference(tag = "don") CityService cityService;

    4) 发请求,通过路由之后,我们可以看到选中了对应标签的分组
    一篇文章带你对dubbo admin知根知底
    文章图片

    黑白名单这里所说的黑白名单并不是我们想的在服务端对请求的ip进行控制,而是基于条件路由来对客户端进行控制,host = xxx => 来表示黑名单地址,host != xxx => 来表示白名单地址。这里要注意一个点:如果你有多张网卡的,则此名单要全部设置上去或者在dubbo端配置地址,不然过滤可能不生效。下面来试一下,创建一个consumer的黑白名单
    一篇文章带你对dubbo admin知根知底
    文章图片

    我本地的电脑ip为 10.60.45.143,发一个请求,发现被拦截了
    一篇文章带你对dubbo admin知根知底
    文章图片

    动态配置Dubbo可以通过外部化配置将配置信息托管在配置中心,这个动态配置的功能就是动态修改配置中的配置,使得在Dubbo中的配置实时生效。
    它是对节点 /dubbo/config/dubbo/{key}.configurators 的更新或者创建。
    权重调整这个比较简单,就是如果服务端有多个节点,通过调整权重,我们可以将请求按比例进行分摊,也是保存到节点/dubbo/config/dubbo/{key}.configurators
    一篇文章带你对dubbo admin知根知底
    文章图片

    看界面基本上已经非常清晰,不再多做介绍。
    负载均衡这个也比较简单,就是如果服务端有多个节点,通过负载均衡策略制定,我们可以将请求进行定制化分发,也是保存到节点/dubbo/config/dubbo/{key}.configurators
    一篇文章带你对dubbo admin知根知底
    文章图片

    看界面基本上已经非常清晰,不再多做介绍。
    总结
    【一篇文章带你对dubbo admin知根知底】Dubbo Admin其实内容看起来不多,但是涉及到的Dubbo知识点非常多,如果没弄懂dubbo,使用上会有很多问题出现并且没有那么容易解决,我觉得官方还是应该出一个详细点的操作手册。

    推荐阅读