启动Dubbo的消费者模块项目报错提示端口被占用。
通过cmd命令提示符:netstat -ano 查看发现Dubbo使用的20880和20881端口都被8080(即提供者模块)占用。
找到与其对应的PID,然后在任务管理器的详细信息里面找到该PID对应的进程将其结束掉。
然后重新依次启动项目,在debug下发现提供者模块启动正常,但是消费者模块启动依然报错。
通过eclipse控制台调试日志发现在消费者模块启动的时候又同时启动了提供者模块(因为消费者依赖于提供者)。
所以新创建的提供者模块进程会占据之前设定好要留给消费者模块的20881端口,就造成了20880和20881都被提供者模块占据。
解决方案是在两个Tomcat的server.xml里面将autoDeploy="true"改成false。
然后再Project-clean,即可解决上述问题。
附:
若autoDeploy="true",则两次部署web应用程序。
第一次因server.xml中的Context配置而被部署(因为deployOnStartup="true");
第二次因为autoDeploy="true"而发生自动部署(默认情况下,在没有显示Context的这些属性时,它们的默认值都是true)。
显示设置autoDeploy="false",避免在server.xml中增加Context配置时两次部署相同的web应用程序。