Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

增加nacos2集群之间,cosul、eureka、zookeeper与nacos2.x集群之间的同步功能 #339

Open
zrlw opened this issue Nov 4, 2023 · 5 comments

Comments

@zrlw
Copy link
Contributor

zrlw commented Nov 4, 2023

dubbo服务端采用应用级别注册时(dubbo.registry.register-mode设为instance),nacos-sync不仅需要同步服务实例,还需要同步dubbo服务实例的元数据:比如接口名到应用名的映射关系,dubbo.tag路由标签,dubbo消费端通过这些元数据信息确定访问哪个服务实例。
相关问题:
#307
alibaba/nacos#5863
为实现上述功能,需要对nacos-sync做修订,增加dubbo临时实例及应用实例元数据在nacos2注册中心之间批量同步功能,修改内容已提交PR到develop分支,其中元数据自动同步功能需要dubbo服务端设置dubbo.application.metadata-type为remote,将各个服务实例元数据存储在元数据中心(默认为local存储在本地)。
此PR已在下列测试场景下完成实例及元数据集群间成功同步。

  1. 两套nacos2.3.0-BETA注册中心集群(包括元数据中心);
  2. 两套dubbo3.2.7测试服务端;
  3. 两套dubbo3.2.7测试消费端。

@paderlol 已经有几个月没有看到你的回帖了,还在nacos-sync么?

@zrlw zrlw changed the title 增加dubbo临时实例及应用实例元数据在nacos2注册中心之间批量同步功能 增加nacos2集群之间,cosul、eureka、zookeeper与nacos2.x集群之间的同步功能 Nov 5, 2023
@zrlw
Copy link
Contributor Author

zrlw commented Nov 5, 2023

#336

  • 增加了consul、eureka、zookeeper到nacos2的同步功能
  • 修订了ZookeeperSyncToNacosServiceImpl删除nacos目标集群全部实例的代码缺陷:
    1. 实例名取值错误,不应从nacosServiceNameMap的keySet取,应该取nacosServiceNameMap每个Entry的value
  1. 不应在for循环遍历nacosServiceNameMap的keySet时进行了map.remove操作,会抛ConcurrentModificationException,应该结束for循环遍历后clear掉全部内容,或者用迭代器改写循环、在循环中调用迭代器remove方法清除当前条目
  2. nacosServiceNameMap清理时机有缺陷

@zrlw
Copy link
Contributor Author

zrlw commented Nov 5, 2023

@binbin0325

@zrlw
Copy link
Contributor Author

zrlw commented Nov 9, 2023

该pr只在nacos2集群之间实现了dubbo服务实例的revision及接口映射关系元数据同步(仅当metadata-type=remote时)。
在其他场景下同步应用级别注册实例,还需要手工在目标集群创建应用实例需要的元数据(主要是接口名与应用名之间的映射关系)

更新:
增加了metadata-type=local的接口映射关系元数据同步(通过查询源集群元数据中心获取应用名对应的接口名)

@zrlw
Copy link
Contributor Author

zrlw commented Nov 15, 2023

如果同步metadata-type=local的dubbo应用级别服务实例,不想手工在目标集群维护mapping映射关系元数据,可以让所有consumer端在@DubboReference注解上添加providedBy属性指定需要调用的应用服务名(dubbo provider配置的dubbo.application.name属性),各个consumer直接感知接口名和应用名的映射关系,这样目标集群元数据中心就不再需要配置映射关系元数据了。

@zrlw
Copy link
Contributor Author

zrlw commented Nov 16, 2023

PR增加nacos2集群之间dubbo映射元数据的同步功能。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant