消费者端调用服务者端的接口,服务端抛出一个自定义异常,该异常继承了RuntimeException,但是消费者端Debug发现catch到的是RpcException,RpcExcetion为dubb

原因分析:

1.方法签名上有声明.方法签名上有声明,如果这个异常是服务提供者中定义的,因为消费端是依赖接口层的,而不是依赖服务提供者.那么编译都编译不过,如果能编译得过,说明消费端是能依赖到这个异常的,因此序列化不会有问题,直接抛出

2.异常类和接口类在同一jar包里.服务提供者和消费方都依赖接口层,如果异常在这个接口层,那序列化也不会有问题,直接抛出
3.是JDK自带的异常,直接抛出服务提供方和消费方都依赖jdk,序列化也不会有问题,直接抛出
4.是Dubbo本身的异常(RpcException),直接抛出服务提供方和消费方都依赖Dubbo,序列化也不会有问题,直接抛出
5.否则,包装成RuntimeException抛给客户端.此时,就有可能出现我说的那种,这个异常是服务提供方自定义的,那么提供方抛出的时候进行序列化,因为消费方没有依赖服务提供方,所以异常到达消费端时,根本无法反序列化.但是包装成了RuntimeException异常则不同,此时异常就是JDK中的类了,到哪都能序列化.

解决方案: 

    规范要求业务方接口声明,例如throws 自定义异常

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值