apache / apache/dubbo

[Bug] Dubbo3.2.16 does not support the use of the same port for Tomcat and REST ports, resulting in port conflicts upon startup

Open
#15,273 3 comments 1 reaction 0 assignees View on GitHub
help wanted
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.