dubbo+spring在多个微服务时候出现 - RpcException & Failed to bind to: /0.0.0.0:20880

本文介绍了解决Dubbo服务启动时端口冲突的问题,并提供了一种通过读取配置文件动态设置Dubbo参数的方法,包括服务名称、端口、注册中心地址等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考资料

实现dubbo随机端口,解决重启Address already in use异常

Dubbo动态改变端口配置

问题重现

这里写图片描述

这里写图片描述

所以,话说,指定的 dubbo的provider端口完全无效。。。

问题解决方案

请用 system.setProperty预先设置dubbo参数。

这里写图片描述

这里写图片描述

优化

如果直接写死是很不优雅的,所以,可以这样优化一下:

    public static void initDubboConfig()  {
        Properties config=new Properties();
        try {
            InputStream in = ClassLoader.getSystemResourceAsStream("conf/env/dubbo.properties");
            InputStreamReader is = new InputStreamReader(in, "utf-8");
            config.load(is);
            is.close();
            in.close();
            System.setProperty("dubbo.protocol.port", config.get("dubbo.port").toString());
            System.setProperty("dubbo.registry.address", config.get("dubbo.address").toString());
            System.setProperty("dubbo.protocol.name", config.get("dubbo.protocol").toString());
        }
        catch (Exception ed){
            ed.printStackTrace();
        }
    }

这里写图片描述

持续优化

索性将必要的dubbo参数都提取出来,彻底优化:
dubbo.properties:

###---同一个微服务参数---###
#注意,不同的微服务它本身的application的名字应该要不一样的。
dubbo.application.name = micro-account-consumer
dubbo.application.owner = programmer
dubbo.application.organization = dubbox

###---同一个微服务下面不同的环境之间的参数差异,注意,端口可以不一样,地址也可以不一样---###
#特别注意,不同的微服务要有不同的服务提供者端口。dubbo.protocol.port,否则会被视为冲突的。
dubbo.port = 20882
#注意,不同环境下,address 地址应该是不一样的。
dubbo.address = zookeeper://localhost:2181

dubbo.protocol = dubbo
    public static void initDubboConfig()  {
        Properties config=new Properties();
        try {
            InputStream in = ClassLoader.getSystemResourceAsStream("conf/env/dubbo.properties");
            InputStreamReader is = new InputStreamReader(in, "utf-8");
            config.load(is);
            is.close();
            in.close();
            System.setProperty("dubbo.application.name", config.get("dubbo.application.name").toString());
            System.setProperty("dubbo.application.owner", config.get("dubbo.application.owner").toString());
            System.setProperty("dubbo.application.organization", config.get("dubbo.application.organization").toString());
            System.setProperty("dubbo.protocol.port", config.get("dubbo.port").toString());
            System.setProperty("dubbo.registry.address", config.get("dubbo.address").toString());
            System.setProperty("dubbo.protocol.name", config.get("dubbo.protocol").toString());
        }
        catch (Exception ed){
            ed.printStackTrace();
        }
    }

provider.xml内容:

这里写图片描述

provider.java:

    public static void initDubboConfig()  {
        Properties config=new Properties();
        try {
            InputStream in = ClassLoader.getSystemResourceAsStream("conf/env/dubbo.properties");
            InputStreamReader is = new InputStreamReader(in, "utf-8");
            config.load(is);
            is.close();
            in.close();
            System.setProperty("dubbo.application.name", config.get("dubbo.application.name").toString());
            System.setProperty("dubbo.application.owner", config.get("dubbo.application.owner").toString());
            System.setProperty("dubbo.application.organization", config.get("dubbo.application.organization").toString());
            System.setProperty("dubbo.protocol.port", config.get("dubbo.port").toString());
            System.setProperty("dubbo.registry.address", config.get("dubbo.address").toString());
            System.setProperty("dubbo.protocol.name", config.get("dubbo.protocol").toString());
        }
        catch (Exception ed){
            ed.printStackTrace();
        }
    }

这里写图片描述

小结

1、在配置环境时候各种小问题小bug实在是层出不穷。
2、某种架构某种结构的落地落实是需要大量时间及逐步调试来实现的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值