[Bug] Dubbo3.2.16 does not support the use of the same port for Tomcat and REST ports, resulting in port conflicts upon startup
- Dominant language
- Java
- Stars
- 41.6k
- Forks
- 26.4k
- Avg merge
- 15h 13m
- Merged PRs (30d)
- 4
Description
### Pre-check
- [x] I am sure that all the content I provide is in English.
### Search before asking
- [x] I had searched in the [issues](https://github.com/apache/dubbo/issues?q=is%3Aissue) and found no similar issues.
### Apache Dubbo Component
Java SDK (apache/dubbo)
### Dubbo Version
dubbo3.2.16
spring5
jdk1.8
### Steps to reproduce this issue
dubbo.properties配置
dubbo.application.logger = slf4j
dubbo.application.name = dubbo-provider
dubbo.application.owner = xiben
dubbo.registry.address = zookeeper://192.x.x.x:2384
dubbo.protocols.rest.name=rest
**dubbo.protocols.rest.port=8080**
**dubbo.protocols.rest.server=servlet**
dubbo.protocols.rest.contextpath=/provider
dubbo.protocols.dubbo.port = -1
dubbo.application.qos-enable = false
### What you expected to happen
没有使用springboot技术,使用传统war包部署在tomcat容器中,tomcat端口是8080,rest配置成8080时,报错如下
java.lang.RuntimeException: java.net.BindException: Address already in use: bind
at org.apache.dubbo.registry.integration.ExporterFactory.lambda$createExporter$0(ExporterFactory.java:33) ~[dubbo-3.2.16.jar:3.2.16]
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660) ~[?:1.8.0_341]
at org.apache.dubbo.registry.integration.ExporterFactory.createExporter(ExporterFactory.java:29) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.registry.integration.RegistryProtocol.doLocalExport(RegistryProtocol.java:328) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.registry.integration.RegistryProtocol.export(RegistryProtocol.java:263) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.qos.protocol.QosProtocolWrapper.export(QosProtocolWrapper.java:79) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.rpc.protocol.ProtocolSecurityWrapper.export(ProtocolSecurityWrapper.java:84) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.rpc.protocol.ProtocolListenerWrapper.export(ProtocolListenerWrapper.java:66) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.rpc.cluster.filter.ProtocolFilterWrapper.export(ProtocolFilterWrapper.java:58) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.rpc.protocol.ProtocolSerializationWrapper.export(ProtocolSerializationWrapper.java:50) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.rpc.protocol.InvokerCountWrapper.export(InvokerCountWrapper.java:42) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.rpc.Protocol$Adaptive.export(Protocol$Adaptive.java) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.config.ServiceConfig.doExportUrl(ServiceConfig.java:947) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.config.ServiceConfig.exportRemote(ServiceConfig.java:917) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.config.ServiceConfig.exportUrl(ServiceConfig.java:857) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.config.ServiceConfig.doExportUrlsFor1Protocol(ServiceConfig.java:602) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.config.ServiceConfig.doExportUrls(ServiceConfig.java:583) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.config.ServiceConfig.doExport(ServiceConfig.java:540) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.config.ServiceConfig.export(ServiceConfig.java:340) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.config.deploy.DefaultModuleDeployer.exportServiceInternal(DefaultModuleDeployer.java:477) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.config.deploy.DefaultModuleDeployer.exportServices(DefaultModuleDeployer.java:424) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.config.deploy.DefaultModuleDeployer.startSync(DefaultModuleDeployer.java:174) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.config.deploy.DefaultModuleDeployer.start(DefaultModuleDeployer.java:156) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.config.spring.context.DubboDeployApplicationListener.onContextRefreshedEvent(DubboDeployApplicationListener.java:157) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.config.spring.context.DubboDeployApplicationListener.onApplicationEvent(DubboDeployApplicationListener.java:143) ~[dubbo-3.2.16.jar:3.2.16]
at org.apache.dubbo.config.spring.context.DubboDeployApplicationListener.onApplicationEvent(DubboDeployApplicationListener.java:52) ~[dubbo-3.2.16.jar:3.2.16]
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:178) ~[spring-context-5.3.39.jar:5.3.39]
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:171) ~[spring-context-5.3.39.jar:5.3.39]
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:145) ~[spring-context-5.3.39.jar:5.3.39]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:430) ~[spring-context-5.3.39.jar:5.3.39]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:387) ~[spring-context-5.3.39.jar:5.3.39]
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:952) ~[spring-context-5.3.39.jar:5.3.39]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:594) ~[spring-context-5.3.39.jar:5.3.39]
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:399) ~[spring-web-5.3.39.jar:5.3.39]
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:278) [spring-web-5.3.39.jar:5.3.39]
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103) [spring-web-5.3.39.jar:5.3.39]
### Anything else
_No response_
### Are you willing to submit a pull request to fix on your own?
- [ ] Yes I am willing to submit a pull request on my own!
### Code of Conduct
- [x] I agree to follow this project's [Code of Conduct](https://www.apache.org/foundation/policies/conduct)
Contributor guide
Research direction
Start with the stack-trace entry point at org.apache.dubbo.registry.integration.ExporterFactory.createExporter and trace how dubbo.protocols.rest.port=8080 with server=servlet is exported in a traditional Spring 5 WAR deployed to Tomcat. Reproduce the startup using the supplied dubbo.properties and verify the result with Tomcat and REST both configured for port 8080; done means startup no longer fails with Address already in use.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, spring
- Domain
- api, backend, distributed-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100