记录Dubbo过程中遇到的问题

今天有个同事在测试环境发现一个问题,在调用dubbo的一个服务报错,查看日志发现,是在多线程里面的业务逻辑中,调用dubbo的其他模块的服务报空指针错误,查看代码后没发现什么问题,于是,就本地启动dubbo环境进行调试,调试过程发现在A模块中的一个服务类ConfigService中调用其他模块B中的一个服务类commonService的方法dealParameters,调用不到,这让我百思不得期解,再仔细看了下模块B中commonService类的代码,发现在类commonService中存在两个方法名相同,但是入参不同的方法,我想了下,是不是因为这个,我改了下我调用的那个方法的名称,重新启动环境进行调试,结果发现不报错了,为了弄清楚为什么报错,我又在commonService类中写了两个方法名相同但是参数不同的方法,在ConfigService中调用,结果发现不报错,仔细对比了差异,发现上面调用dealParameters方法时,入参中传入了一个空的参数,改为有值后,不报错。后面又试了同一个模块中调用其他服务类中存在相同方法名不同参数的方法,不报错。

由此得出了在使用dubbo中,两个模块之间调用服务,如果一个服务类中存在相同方法名不同入参时,调用方不能传入null参数,否则会报空指针。

代码如下:
模块B的接口类和服务类,在配置文件中暴露此服务

public interface ICommonService{

    String dealParameters(String a,String b);

    String dealParameters(String a,String b,String c,String d);
}
public Class commonService implements ICommonService{

    public String dealParameters(String a,String b){
        .....
    }

    public String dealParameters(String a,String b,String c,String d){
        .........
    }

}

模块A的服务类,在配置文件中,引入模块B中暴露的服务ICommonService:

public Class ConfigService{
    @Inject
    private ICommonService commonService;

    public String test(){
        String a="1";
        String b="2";
        String c="3";
        String d="4";
        //入参中存在空,会报空指针异常
        String result = commonService.dealParameters(a,b,c,null);
        //这样不会报错
        String result = commonService.dealParameters(a,b,c,d);

    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章