最近难忘的生产问题处理

下面是dubbo validation的官方文档
https://dubbo.apache.org/zh/docs/advanced/parameter-validation/

我们用的是dubbox 2.8.4版本

有一个参数没传,但是在捕获异常的时候,并没有拿到校验的错误信息,反而报了一个null指针

    try {
            String say = sayHelloApi.say(req);
            System.out.println(say);
        } catch (RpcException  e) { // 抛出的是RpcException
            ConstraintViolationException ve = (ConstraintViolationException) e.getCause();
            Set<ConstraintViolation<?>> violations = ve.getConstraintViolations();
           System.out.println(violations);
        }

在这里插入图片描述
看dubbo源码,发现结果为空
com.alibaba.dubbo.rpc.protocol.dubbo.filter.FutureFilter
在这里插入图片描述

dubbo的请求会经过下面的filter链。有5个filter,会正序执行。

com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper#buildInvokerChain

在这里插入图片描述
在这里插入图片描述
但在HystrixFilter的时候,返回了一个null值,导致后面的FutureFilter 空指针,见上图

在这里插入图片描述

理论上来说,校验不过,应该直接抛异常,类似下图

在这里插入图片描述

问题发现:

还以为是自己写代码缺少了配置,但同事发现他的dubbo.2.8.4版本没有这个HystrixFilter。跟官网对比后。发现现在仓库中的2.8.4版本是别人魔改过的。加一个HystrixFilter,还有bug

https://github.com/dangdangdotcom/dubbox/tree/master/dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/filter
在这里插入图片描述

1.解决办法,按照dubbo包的路径,重写下HystrixFilter,直接返回result=invoker.invoke(invocation),

在这里插入图片描述

在这里插入图片描述

2.换成原始的dubbox2.8.4的包,原始包没有这个filter。遇到异常直接抛出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值