问题起源
最近在对现有业务系统进行Dubbo服务化重构,部署方式采用Docker部署,注册中心采用nacos。当部署完成之后会发现消费者服务能正常启动,服务在注册中心显示正常,但是进行服务调用的时候就会报错,对应的服务无响应信息。
1 | com.alibaba.dubbo.remoting.RemotingException: message can not send, because channel is closed |
问题追溯
报错信息显示comsumer地址是172.18.*.*,这是docker容器的ip地址,猜想应该是容器之间无法进行调用。把docker服务启动参数修改成宿主机的内网地址,依然还是报错。是否应该是服务端口号不一致?查看dubbo端口绑定源码。
1 | /** |
整个方法最核心的代码:
1 | String port = getValueFromConfig(protocolConfig, Constants.DUBBO_PORT_TO_BIND); |
通过读取系统环境变量:DUBBO_PORT_TO_BIND获取暴露端口。如何修改这个参数呢?想到了docker三剑客之docker-compose。现在多个服务要逐个启动,正好使用compose可以解决这个问题。

