Closed symon-lin closed 3 months ago
粗看了下,是会有这个隐患
如何解决呢?升级版本?
@symon-lin 这应该是个 bug,当多个 Consumer 共用一个 NacosRegistry 实例时会发生。一种解决方案是 providerObserver 的初始化可以放到 init 方法中去。后续会去修复这个问题,如果感兴趣的话,可以参与贡献。如果你自己的生产代码需要立马修复,可以写个nacos 的 Extension 去覆盖 sofarpc 的实现。
Your question
场景:nacos+sofa的集成场景。
代码入口:com.alipay.sofa.rpc.registry.nacos.NacosRegistry#subscribe
上面的代码中,
providerObserver = new NacosRegistryProviderObserver();
没有对providerObserver
进行加锁控制,是否会出现并发的情况下(比如:多模块并行启动),存在多个服务订阅端,然后前面的一个Consumer创建了Observer类,然后后面的Consumer也创建了Observer类并进行覆盖,导致前面的Consumer listener丢失的情况。Environment
java -version
): 1.8.0_332uname -a
): Linux statement-group2-6c7c5df77d-vcqs4 5.4.247-162.350.amzn2.aarch64 #1 SMP Tue Jun 27 22:03:50 UTC 2023 aarch64 GNU/Linux