Describe the feature
目前dubbo3服务注册到注册中心之后,还会发布映射关系到注册中心的元数据中心,但是只发部了“接口名 -》 应用名”的单向映射。 nacos-sync这种同步服务实例到目标集群的工具,不仅要同步实例,而且要同步这种映射关系的元数据。 问题是当dubbo服务注册方式为应用级别实例、而且metadata-type为默认local时,nacos-sync不知道要从注册中心元数据中心拉取哪些元数据,因为nacos-sync只知道要同步的应用服务名,并不能知道元数据里哪些dataId对应这个应用服务名,即使通过http方式遍历获取所有group=mapping的映射记录,也不能确定这些mapping都是有效的,因为实例注销之后这些元数据还会长期保留(比如kill -9干掉了dubbo服务,注册中心会自动注销实例,但对应的元数据还留在了元数据中心)。 这个问题有个简单的解决办法:dubbo注册应用实例成功后再发布map到元数据中心时,多发布一个反向的映射关系,dataId为应用名,group为mapping,内容为本次发布的其他mapping的dataId集合,比如"com.xxx.InterfaceA, com.xxx.InterfaceB,com.xxx.InterfaceC" 这个mapping对dubbo自己没有用,但对注册实例同步工具是巨大的支持,补齐了中间缺少的一环: 获取服务实例列表 -》 获取应用Instance名(应用名) -》根据应用名查询元数据中心获取各个Interface名称 -》从元数据中心拉取各个Interface的元数据 -》同步元数据到目标集群 、 同步服务实例到目标集群