Closed bungder closed 5 years ago
解决了。
这实际上是版本差异导致的。dubbo-admin使用的dubbo版本是2.7.2,而我服务提供者使用的版本是2.7.1,因为需要用到dubbo-spring-boot-starter,而dubbo-spring-boot-starter官方版本最新的只是2.7.1。我自己手动将dubbo-spring-boot-starter里的版本升级到2.7.2之后,服务提供者也将依赖版本升级到2.7.2就可以了。升级之后可以看到zk里metadata的存储路径变了。
另外有一点需要提一下,从2.7.1升级到2.7.2,需要将zk里的注册信息清理掉,不然会启动不起来。
在页面上的“服务查询”里点击“查询结果”里的“详情”进去,会报错。
(实际上上面这一个异常日志默认是没有打出来的,需要设置dubbo的LoggerAdapter:
LoggerFactory.setLoggerAdapter(new org.apache.dubbo.common.logger.slf4j.Slf4jLoggerAdapter());
)获取元数据是在
dubbo-admin-server/src/main/java
中的org.apache.dubbo.admin.controller.ServiceController
里的serviceDetail
方法中完成的,当使用zk作为注册中心的时候,String metadata = providerService.getProviderMetaData(identifier);
这里,metadata
是127.0.0.1
,debug进去的话,在org.apache.dubbo.admin.registry.metadata.impl.ZookeeperMetaDataCollector
中,doGetMetadata
方法里的path
是dubbo/metadata/com.bungder.test.SampleService/provider/sample-service-impl
,但是实际上,zk里在这个路径下,只有一个名为service.data
的property,如果path
加上/service.data
,那么就能获取到正确的json字符串,否则只会获取到127.0.0.1
,然后页面上还是看不到元数据。如果我在org.apache.dubbo.admin.registry.metadata.impl.ZookeeperMetaDataCollector的doGetMetadata方法里加上判断:
在页面上的“服务查询”里点击“查询结果”里的“详情”进去能正常看到元数据,但是在“服务测试”里搜索却又出错了,因为这里也会调用到
org.apache.dubbo.admin.registry.metadata.impl.ZookeeperMetaDataCollector
的doGetMetadata
方法。使用的dubbo-admin版本是develop分支里最新的提交:
另外运行的服务提供者使用的dubbo版本是2.7.1