dubbo中元数据是啥?
元数据就是描述数据的数据,比如服务的名称,服务地址,方法列表,方法参数,服务版本等等。
上一篇介绍了如何去部署我们新版本的Dubbo Admin(2.7),这篇主要说下怎么去查看注册中心中的数据。
新版的Dubbo Admin将注册中心拆分出来,元数据独立出来,可以使用zk,redis等。如果dubbo用的还是2.7之前的,那么在新版Admin中是看不见元数据的。
如果需要看到元数据,可以看看上一篇文章。最终效果如下:
获取元数据示例
com.demo.demoapi.service.providers.DemoService 是我写的一个demo。里面有个getMetadata方法,是用来获取DemoService的元数据信息的,
通过dubbo admin 测试接口或者通过接口调用都可以获取到元数据信息。如下:
接口调用获取:
获取元数据代码分析
消费者代码
@RequestMapping("/getMetadata")
public String getMetadata() {
String interfaceName = demoService.getClass().getInterfaces()[1].getName();
return demoService.getMetadata(interfaceName);
}
api代码
String getMetadata(String interfaceName);
提供者代码
@Override
public String getMetadata(String interfaceName) {
CuratorFramework client = null;
try {
client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", new ExponentialBackoffRetry(1000, 3));
client.start();
String path = "/dubbo/metadata/" + interfaceName + "/provider/providers";
if (client.checkExists().forPath(path) == null) {
return null;
}
String metadata = new String(client.getData().forPath(path));
return metadata;
} catch (Exception ex) {
return "未获取到数据源";
} finally {
if (client != null) {
client.close();
}
}
}
核心代码也看出了了,就是涉及到 CuratorFramework这块的,Curator就是一套zookeeper的客户端框架,相当于封装了一层,让开发者操作zk更方便,不用管
太多底层的东西。具体可以看下 Curator的 说明。这里代码就是创建一个zk客户端,然后获取dubbo/metadata节点下相应服务的数据。
当然如果不想自己写代码,也可以用客户端软件来直接查看,比如: