问题:
批量启动dubbo多实例服务,有些服务会启动失败,提示Failed to bind NettyServer on /10.1.7.16:20881
原因:
dubbo服务启动后会占用2个端口,一个server.port服务的端口,一个dubbo.cloud.protocol.port远程调用端口,多个实例同时启动时,会默认去监测20880端口,如果被占用了,则依次加1去占用端口,但这个过程是线程不安全的,会出现多个实例监测同一个端口未被占用,而同时申请占用该端口,会导致后启动的应用启动失败。
A1:环境变量:DUBBO_PORT_TO_BIND=
A2:java系统属性:-DDUBBO_PORT_TO_BIND=
A3:–dubbo.protocol.port= 这种方式优先机没有配置中心的高,如果要使用这种方式,需要把配置中心的dubbo.protocol.port参数删除才可以的。