## What is the purpose of the change
两个consumer同时通知接收provider变更信息的时候,在如下场景存在bug
```
@Reference(check = false,timeout = 2000)
private TestService testService;
@Reference(check = false)
private TestService testService;
在dubbo看来是两个consumer,但nacos注册中心的代码如下:
private void subscribeEventListener(String serviceName, final URL url, final
NotifyListener listener)
throws NacosException {
if (!nacosListeners.containsKey(serviceName)) {
EventListener eventListener = event -> {
if (event instanceof NamingEvent) {
NamingEvent e = (NamingEvent) event;
notifySubscriber(url, listener, e.getInstances());
}
};
namingService.subscribe(serviceName, eventListener);
nacosListeners.put(serviceName, eventListener);
}
}
有一个验证操作.思路应当是serviceName能构成一个唯一的consumer,但这里是有问题的.
对于dubbo那边是把一个url看做一个key,而这里的key仅仅是serviceName+group+version.
这两边逻辑不匹配.
bug复现步骤
1.同一进程启动两个consumer(两个timeout设置不同,或者其他参数不同)
2.启动一个provider
3.分别调用两个consumer(都可调通)
4.provider停机,手动修改端口号(或者ip)
5.这时候从新启动provider,你会发现一个consumer不能调用了(底层没有通知到)
频发场景
1.provider提供方是docker的情况
2.provider端口号是随机的情况,并且是混合部署
```
[ Full content available at: https://github.com/apache/dubbo/pull/5212 ]
This message was relayed via gitbox.apache.org for
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]