## 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]

Reply via email to