You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@dubbo.apache.org by "gMan1990 (GitHub)" <gi...@apache.org> on 2018/12/08 07:00:44 UTC

[GitHub] [incubator-dubbo] gMan1990 commented on issue #2862: com.alibaba.dubbo.config.ServiceConfig#findConfigedPorts 多次执行

@zonghaishang 不好意思,我再展开说下:
- <dubbo:protocol name="dubbo" port="-1"
- DUBBO_PORT_TO_BIND未配置
---
以dubbo-2.6.3来说:
1. 假设写了2个Service,那么就会有2个com.alibaba.dubbo.config.spring.ServiceBean实例
```
@com.alibaba.dubbo.config.annotation.Service
public class Service1 ... (还有Service2)
```

2. 每个实例都会执行doExportUrls方法:
https://github.com/apache/incubator-dubbo/blob/6ce7b11f982c5f7beb2ac5897fb33d48da357ada/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ServiceConfig.java#L355
```
private void doExportUrls() {
    List<URL> registryURLs = loadRegistries(true);
    for (ProtocolConfig protocolConfig : protocols) {
        doExportUrlsFor1Protocol(protocolConfig, registryURLs);
    }
}
```
假设只有一个registry和protocol,那么一个实例执行一次doExportUrlsFor1Protocol

3. 然后执行到findConfigedPorts方法
https://github.com/apache/incubator-dubbo/blob/6ce7b11f982c5f7beb2ac5897fb33d48da357ada/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ServiceConfig.java#L635
- 第1个实例执行到这一行:portToBind = getRandomPort(name); 得到Integer.MIN_VALUE,然后会执行getAvailablePort和putRandomPort,然后```logger.warn("Use random available port("```
- 第2个实例执行到这一行:portToBind = getRandomPort(name); 得到第1个实例putRandomPort的端口,然后```logger.warn("Use random available port("```
---
就变成每个ServiceBean都打印一句```logger.warn("Use random available port("```了,重复打印

[ Full content available at: https://github.com/apache/incubator-dubbo/issues/2862 ]
This message was relayed via gitbox.apache.org for notifications@dubbo.apache.org