一. 项目拉取
官网clone对应项目
- 该admin控制台为前后端分离项目,需要分开跑前后端程序
- url: https://github.com/apache/dubbo-admin
这里我使用IDEA进行 clone操作
由于Dubbo的更新,Readme可能会变,这里放张截图
目录结构如图:
二. 前后端项目启动
后端项目
- 修改注册中心配置,启动主启动类
- 或者修改配置后,mvn clean package打成jar包运行
这里是在IDE里启动
前端项目
- 命令行打开到dubbo-admin-ui所在文件夹
- 第一次运行,先执行npm install
- 再npm run dev
- 访问localhost:8081
这里写了个provider的demo,所以才有服务查询结果
三. 显示元数据
步骤
- dubbo-admin-server,添加如下图代码
- dubbo远程通信的服务提供者,的配置中添加
dubbo.metadatareport.address=zookeeper://127.0.0.1:2181
。我这使用的是SpringBoot搭建的服务提供者,pom如下
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
dubbo-admin-server
@PostConstruct
public void init() throws Exception {
CuratorFramework zkClient = CuratorFrameworkFactory.builder().
connectString("127.0.0.1:2181").
retryPolicy(new ExponentialBackoffRetry(1000, 3)).build();
zkClient.start();
if (zkClient.checkExists().forPath("/dubbo/config/dubbo/dubbo.properties") == null) {
zkClient.create().creatingParentsIfNeeded().forPath("/dubbo/config/dubbo/dubbo.properties");
}
zkClient.setData().forPath("/dubbo/config/dubbo/dubbo.properties", ("dubbo.registry.address=zookeeper://127.0.0.1:2181\n" +
"dubbo.metadata-report.address=zookeeper://127.0.0.1:2181").getBytes());
}
服务提供方配置
这里要注意版本!版本!!版本。原先我在服务提供方使用2.7.5的jar,但是按这样配置,显示不出元数据,应该是元数据的配置写法和版本有关。后来改成2.7.3,就可以了。此提供方配置的写法,对应的是2.7.3的jar
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
显示结果
四. 简单一提: 服务熔断及服务降级
网上很多视频是教旧版的dubbo-admin控制台,找了旧版的控制台进行比较
1. dubbo-admin带的服务熔断及服务降级
服务降级: 根据实际业务情况,调整流量,关闭不必要的服务,防止影响核心业务
- 通过dubbo-admin控制台,在消费者处 — 点屏蔽服务。即: 在消费者处就不会发起远程调用了,直接返回null
服务容错 — 失败为null: 当服务超时,调用端发生了错误,进行容错机制
- 通过dubbo-admin控制台,在消费者处 — 点容错。即: 在消费者处进行远程调用,成功则远程调用,失败则是返回null
- 上面的是学习旧版dubbo-admin的笔记。现在没有发现直接点击的降级与容错
- 降级熔断还可以用hystrix
2. 旧版控制台
- 旧版控制台可以直接控制服务熔断与服务降级
- 在新版控制台,没有发现这个功能…手动狗头。有发现的话,可以tell tell me
3. dubbo服务降级熔断 原理
只深入一点,没太深究
1. 简单说明: 其实就是往zookeeper放入对应的节点标记,mock=force为降级配置,mock=fail为熔断配置。之后调用前,先去zookeeper查看对应节点,进行判断后,再决定是否调用服务
2. debug查看:
- 上面图中
registry.register(URL.valueOf("override://0.0.0.0/com.foo.BarService?category=configurators&dynamic=false&application=foo&mock=force:return+null"));
- debug时 对应的Registry实现类为ZookeeperRegistry,调用其register方法(该方法是在父类FailbackRegistry中)
- 主要逻辑在doRegister方法中,doRegister为FailbackRegistry的抽象方法,具体实现在ZookeeperRegistry
- 这里是模版方法模式,真滴很常用! ,有兴趣可以了解下
zookeeper中查看该对应节点