多个nacos注册中心,通知模块单例导致全部通知的问题
dubbo3.0.9,目前我看了代码感觉这个问题无解,必须改nacos的代码了
nacos多注册中心,实例发现,两遍都注册,一遍改变通知过来,两个ServiceInstancesChangedListener都会触发(因为key和group相同),NamingEvent也没有足够信息过滤掉错误的通知,导致后续处理出错
- 条件: (1)只用实例发现 (2)配置2个nacos的注册中心 (3)服务自省用remote模式(可以明确看到两个revision不同) (4)接口A使用global导出,接口B使用nacos-registry导出,这样revision就不同了
dubbo.application.register-mode=instance dubbo.application.service-discovery.migration=FORCE_APPLICATION
dubbo.registries.nacos-registry.id=nacos-registry dubbo.registries.nacos-registry.address=nacos://main-a-nacos.blurams.vip:8848 dubbo.registries.nacos-registry.use-as-metadata-center=true dubbo.registries.nacos-registry.use-as-config-center=false dubbo.registries.global.id=global dubbo.registries.global.address=nacos://global-nacos.blurams.vip:8848 dubbo.registries.global.use-as-metadata-center=true dubbo.registries.global.use-as-config-center=false
dubbo.application.metadata-type=remote
-
观察:两个注册中心都存在utopia-channel-server,他们的revision是不同的,应该计算的时候带注册中心的
-
结果:这个时候已经满足触发的条件了,比如global-nacos.blurams.vip:8848 utopia-channel-server变更通知过来,那么 两个ServiceInstancesChangedListener都会被触发,因为key和group都是一样的
然后后续main-a-nacos.blurams.vip:8848这个ServiceInstancesChangedListener就报错了(一直死循环查地址,因为revision查不到信息)
@AlbumenJ
感觉无解,数据不足,过滤不掉
我打算修改注册中心代码,目前配置group是无效的,加上dubbo.registries.global.group=public-global 这样强制group不同
https://github.com/alibaba/nacos/issues/8428 这个问题 nacos 有在修复。