AlbumenJ commented on issue #13298: URL: https://github.com/apache/dubbo/issues/13298#issuecomment-1801357956
> dubbo3服务采用应用级别注册到nacos2时,实例信息会存放在注册中心的临时实例内存表(dubbo都是临时实例),dubbo3服务的各个接口名与应用名之间的映射关系会存到元数据中心的config_info表(dataId字段存接口名,groupid字段存固定值mapping,content字段存应用名,如果映射到多个应用,各个应用名之间逗号分割)。 nacos-sync同步数据到nacos目标集群,本质是将上述数据从源集群的上述两个表取出服务实例、映射关系等数据放入目标集群,现在nacos提供的从config_info取数据的接口方法只有dataid和groupid条件,没有content参数,只能按dubbo3的接口名和mapping去查询content。 > > 1. 如果把应用名和所属的各个接口存到config_info表,dataid字段存应用名,groupid字段存固定值appmapping(和mapping区别开来的目的是防止dubbo应用名命名时和某个接口名重名,那样就会取错记录了),content字段存该应用的各个接口; > 2. nacos-sync通过nacos提供的config_info查询接口,把dataid条件设为要同步的应用名、groupid设为appmapping就能获取config_info对应记录的content字段里的所有接口名; > 3. nacos-sync将源集群查询将查到的接口名作为dataid、groupid设为mapping、content设为应用名,循环调用nacos元数据发布接口,依次将这些接口与应用名的映射关系全部存入目标集群的config_info表; > 4. nacos-sync按应用名调用nacos服务实例信息查询接口,获取nacos源集群的服务实例信息,然后调用注册接口方法将获取的服务实例信息登记到nacos目标集群; > 5. 如果获取的服务实例信息里的metadata-type为remote(元数据存储在元数据中心),nacos-sync还需要将应用名作为dataid,服务实例信息里的revision作为groupid条件,调用元数据查询接口从nacos源集群获取dubbo服务实例元数据(查询config_info表),调用元数据发布接口再把服务实例的元数据发布到nacos目标集群,存入目标集群元数据中心的config_info表; > 6. 目标集群的dubbo消费者将rpc接口名作为dataid条件,groupid设为mapping,查询nacos目标集群元数据中心,查询config_info表里对应接口名的应用名(content字段);再将查到的应用名作为服务实例名,调用服务实例查询方法,从nacos目标集群的临时实例内存表拉取对应的dubbo服务实例信息; > 7. 目标集群的dubbo消费者获取服务实例信息后,如果服务实例信息里的metadata-type为local(存在服务端本地),目标集群的dubbo消费者建立长连接到服务实例信息里声明的ip和port之后,从服务端直接拉取dubbo服务实例元数据(比如dubbo.tag); > 8. 如果服务实例信息里的metadata-type为remote,目标集群dubbo消费者将dataid设为应用名,groupid设为服务实例信息里的revision值,调用目标集群元数据中心查询接口,查询config_info对应记录里的dubbo服务实例元数据(content字段)。 这里是不是有个误区,我的问题是为什么不能直接让 nacos-sync 同步指定的几个应用(dataId) 比如 com.example.Demo1 -> app1 com.example.Demo2 -> app1 com.example.Demo3 -> app2 那同步的时候直接配置同步 app1,而不是配置同步 com.example.Demo1 -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
