dubbo admin 查看Dubbo服务的方法报错: "无元数据信息,请升级至Dubbo2.7及以上版本
Dubbo2.7.5版本,Dubbo-Admin的develop分支中是用Dubbo2.7.3版本。
官方给出解决方法:
就是我们需要在ZK中配置注册中心和元数据中心地址。但是具体没没明白什么意思。
找了很多资料,都说的是需要在ZK服务的路径下新增一个文件,路径按照上面的路径,内容就是content。
第一种方法():手动创建文件
public static void init() throws Exception {
CuratorFramework zkClient = CuratorFrameworkFactory.builder().
connectString("192.168.2.234: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://192.168.2.234:2181
" +
"dubbo.metadata-report.address=zookeeper://192.168.2.234:2181").getBytes());
}
————————————————
版权声明:本文为CSDN博主「jast_zsh」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhangshenghang/article/details/104369935
但是我试了一下,还是不行。
第二种方法():在项目中增加Dubbo配置(https://www.cnblogs.com/timfruit/p/12433931.html)
/**
* 2.7.0版本及以上 在dubbo-admin显示元数据的配置,
*
* 需要注意, dubbo-admin和服务提供者引入的dubbo为同一版本才行
*
* @author TimFruit
* @date 20-3-3 下午11:49
*/
@EnableDubbo
@Configuration
@Slf4j
public class DubboConfig implements EnvironmentAware {
private Environment env;
@Override
public void setEnvironment(Environment environment) {
this.env=environment;
}
// 2.7.0 版本以上
// https://blog.csdn.net/wangxq0224/article/details/99304253
//用于fix dubbo admin : "无元数据信息,请升级至Dubbo2.7及以上版本,或者查看application.properties中关于config center的配置,详见 这里"
// https://github.com/apache/dubbo-admin/wiki/Dubbo-Admin%E9%85%8D%E7%BD%AE%E8%AF%B4%E6%98%8E
@PostConstruct
public void postInitAdminMeta(){
final String REGISTRY_ADDRESS="dubbo.registry.address";
String registryAddress=env.getProperty(REGISTRY_ADDRESS);
if(!StringUtils.hasText(registryAddress)){
log.warn(REGISTRY_ADDRESS+"属性没有配置值");
return;
}
if(!registryAddress.startsWith("zookeeper")){
log.info("注册中心不是zookeeper");
return;
}
//注册中心为zookeeper, 修复元数据问题
String data=REGISTRY_ADDRESS+"="+registryAddress;
final String META_REPORT_ADDRESS="dubbo.metadata-report.address";
String reportAddress=env.getProperty(META_REPORT_ADDRESS);
if(StringUtils.hasText(reportAddress)){
data=data+"
"+META_REPORT_ADDRESS+"="+reportAddress;
}
log.info("
== data: {}", data);
//warn: 多个注册中心未测试
String connectString=registryAddress.replace("zookeeper://", "");
RetryPolicy retryPolicy=new RetryNTimes(2, 1000);
CuratorFramework zkClient=CuratorFrameworkFactory.newClient(connectString,retryPolicy);
zkClient.start();
try {
String nodePath="/dubbo/config/dubbo/dubbo.properties";
if(zkClient.checkExists().forPath(nodePath)==null){
zkClient.create()
.creatingParentsIfNeeded()
.forPath(nodePath, data.getBytes());
}else {
zkClient.setData().forPath(nodePath, data.getBytes());
}
} catch (Exception e) {
throw new RuntimeException(e);
}finally {
zkClient.close();
}
}
然后重启了之后,还是不行。
最后修改了Dubbo版本和Dubbo-Admin中保持一致,都是用2.7.3版本。
重新启动后正常显示。
服务测试正常显示
测试成功返回:
总结自:
https://www.cnblogs.com/timfruit/p/12433931.html
里面还有2.7.5的解决方法。