本篇主要介绍一下dubbo admin的使用,使用之前我们需要先进行搭建,对于如何搭建,参考 dubbo admin搭建。
如何使用
登录成功之后我们会看到如下界面,上面的服务就是我们注册中心注册上去的服务
文章图片
在对应的服务上点击详情
文章图片
此时我们就能看到对应服务的相关信息,很多时候如果你配置有问题是看不到这么多信息的,这里需要重点说明一下这个页面怎么出来元数据信息的。
元数据信息怎么显示
1)application.properties 配置文件要配置好配置中心
文章图片
也就是上图中的 admin.config-center,其他两个就直接注释掉不配了,这一点dubbo官方也提到了
文章图片
官方这里提到一点,需要在配置中心配置注册中心以及元数据中心地址,这点怎么做呢?我这里也说明一下(用的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-api-docs)
在界面中,我们可以看到有一个接口文档的项
文章图片
这个其实就是 dubbo-admin 使用了 dubbo-api-docs 的功能,这里说的使用并不是说直接引入对应的包,而是根据 dubbo-api-docs 暴露服务的规则来调用服务。
简单的介绍一下 dubbo-api-docs 原理:
其实就是暴露一个
org.apache.dubbo.apidocs.core.providers.IDubboDocProvider
接口,看下源码文章图片
对于使用 dubbo-api-docs(基于2.7.8.1版本),这里需要注意几点:
- dubbo版本需要在2.7.7以上,不然不支持DubboService注解
- 配置文件中一定要配置
ApplicationConfig
、RegistryConfig
、ProtocolConfig
,需要在application.properties 中配置,其他地方比如 dubbo.properties 中配置会启动出错,暂时还没找到具体原因(后面会再看下)
对于具体的使用,官方写得比较详细了,参考 dubbo-api-docs使用。
dubbo-api-docs介绍到这,继续看接口文档功能使用,目前是直连模式直接去提供者取的,所以填入提供者的ip和端口(后续据说会支持去注册中心拿),点击加载接口列表
文章图片
这里有个点要注意:dubbo-admin 默认调 dubbo-api-docs 时会带上版本号 v1 以及 group 值apiDocsGroup,而我们服务提供者并没有,这样会导致调用失败,所以可以在 application.properties 中加配置设置为空值或者你自己需要的值
文章图片
点击服务之后就会出现服务接口
文章图片
点击接口之后右边就会出现相应的接口信息
文章图片
配置管理
我们知道dubbo是支持配置中心的,这个配置管理其实就是对于配置中心的管理。
文章图片
默认是搜索 global,也就是全局的配置,这里以 zookeeper 为例,对应的节点路径是 /dubbo/config/dubbo/dubbo.properties来存全局配置。
文章图片
这个路径是不是很熟悉?没错,就是上面介绍元数据怎么来的时候配置过的节点,这个就是对那个配置的管理,我们看下里面的数据
文章图片
接着我们来创建一个配置,大概如下
文章图片
这里的应用名其实就是一个节点路径的key,存储格式为/dubbo/config/dubbo/{key}/dubbo.properties,所以我们这个结果最终保存到zk的这个节点下,我们在zk中也能看到
文章图片
然后搜索一下刚创建的配置信息
文章图片
服务统计
服务统计其实就是一个监控的功能,会对服务的 qps、rt 等进行统计展示,这个版本目前功能还不是很完善
文章图片
服务关系先来看简单的服务关系,这个比较简单,就是基于服务全名(包名全路径)来关联消费者和提供者,不多做介绍。
文章图片
服务统计这里又涉及到 dubbo 版本了,dubbo 在 2.7.2 开始才提供了度量指标的功能,服务统计功能在这个版本目前应该是无法使用的,我在github上已经提了 issue,其实个人感觉完全可以将 metrics 集成到 monitor(后面会单独再介绍一下 dubbo monitor ),这里再说一下dubbo admin其实还是需要自己维护,社区也并不活跃,虽然目前这个功能是有问题的,还是介绍一下如何使用。
1) dubbo 服务配置 metrics 内容,主要就是端口号和协议就行了,如果这里不配协议,默认是dubbo
文章图片
2) 服务配置,消费端同理
文章图片
3) 发一次dubbo调用,促进生成 MetricsService
4) 在dubbo admin中输入Ip发起查询
文章图片
如果配置都正确的情况下,这里会提示 service not fund 的异常,具体原因可以看上面提的issue,但是我看网上还是有些人能用一部分服务统计功能的(除了线程池),如果你发现你能用服务统计功能,那请留言探讨。
服务mock
这个功能暂时也没有实现
服务治理
这是一个大头,放在最后压轴,这个版本的dubbo admin都是基于配置中心来管理的,所以前提是要配置好配置中心,内容也比较多,我们也一点一点介绍。
条件路由先解释下什么是条件路由:基于 消费端条件 => 提供端条件 的规则对消费端的请求进行路由。具体的规则以及实现机制,推荐看下这篇 Dubbo 路由机制的实现。从代码中没看到配置和读取rule的逻辑,所以目前应该只能通过注册中心通知机制来触发条件路由,这里说说怎么使用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中有了
文章图片
然后消费端会收到对应的通知
文章图片
可以看到这是一个路由规则的节点通知,当然如果你配置了配置中心,则在org.apache.dubbo.rpc.cluster.router.condition.config.ListenableRouter#process
这里收到通知。
根据服务名配置路由对应代码中的ServiceRouter
,根据应用配置路由对应代码中的AppRouter
,核心逻辑还是在他们的父类ListenableRouter
中触发,匹配的规则在对象的matches变量中存放,不匹配的在mismatches中存放。
需要注意:2.7版本之后需要配置配置中心才行
标签路由标签路由,顾名思义就是根据标签进行路由,我们可以通过标签给对服务节点进行分组,然后在客户端打标签,将客户端的请求限定在标签对应分组的节点之中。它的原理和条件路由一样,也是需要通过管理平台配置来回调更新客户端的router规则。对应的是TagRouter
。来看下怎么用
1) 先给服务端打标签分组
文章图片
2) 创建好之后,会在 dubbo/config/dubbo/provider.tag-router 路径下创建节点,可以看到已经有了
文章图片
3) 在消费者端打上要走的标签
@DubboReference(tag = "don") CityService cityService;
4) 发请求,通过路由之后,我们可以看到选中了对应标签的分组
文章图片
黑白名单这里所说的黑白名单并不是我们想的在服务端对请求的ip进行控制,而是基于条件路由来对客户端进行控制,host = xxx => 来表示黑名单地址,host != xxx => 来表示白名单地址。这里要注意一个点:如果你有多张网卡的,则此名单要全部设置上去或者在dubbo端配置地址,不然过滤可能不生效。下面来试一下,创建一个consumer的黑白名单
文章图片
我本地的电脑ip为 10.60.45.143,发一个请求,发现被拦截了
文章图片
动态配置Dubbo可以通过外部化配置将配置信息托管在配置中心,这个动态配置的功能就是动态修改配置中的配置,使得在Dubbo中的配置实时生效。
它是对节点 /dubbo/config/dubbo/{key}.configurators 的更新或者创建。
权重调整这个比较简单,就是如果服务端有多个节点,通过调整权重,我们可以将请求按比例进行分摊,也是保存到节点/dubbo/config/dubbo/{key}.configurators
文章图片
看界面基本上已经非常清晰,不再多做介绍。
负载均衡这个也比较简单,就是如果服务端有多个节点,通过负载均衡策略制定,我们可以将请求进行定制化分发,也是保存到节点/dubbo/config/dubbo/{key}.configurators
文章图片
看界面基本上已经非常清晰,不再多做介绍。
总结
【一篇文章带你对dubbo admin知根知底】Dubbo Admin其实内容看起来不多,但是涉及到的Dubbo知识点非常多,如果没弄懂dubbo,使用上会有很多问题出现并且没有那么容易解决,我觉得官方还是应该出一个详细点的操作手册。
推荐阅读
- Dubbo使用Hessian2序列化时针对Byte类型出现java.lang.ClassCastException
- Dubbo|【Dubbo | Zookeeper】一篇文章入门Dubbo+Zookeeper
- SpringBoot整合RPC框架Dubbo
- Spring|Spring Cloud Alibaba(四)(Spring Cloud 使用 Sentinel 实现限流)
- Spring|Spring Cloud Alibaba(三)(使用 Nacos config 实现统一配置管理)
- Spring|Spring Cloud Alibaba(二)(注解实现 Dubbo 服务调用失败时的本地伪装)
- java框架|org.apache.curator.CuratorConnectionLossException: KeeperErrorCode = ConnectLoss
- Dubbo之RpcContext原理
- Java|dubbo @EnableAsync @Configuration
- dubbo中的ExtensionLoader详解