zoukankan      html  css  js  c++  java
  • 消费者端调用服务者端的接口,服务端抛出一个自定义异常,该异常继承了RuntimeException,但是消费者端Debug发现catch到的是RpcException,RpcExcetion为dubbo的异常,为什么服务提供者的返回的是自定义异常却变成了RpcException?

    原因分析:

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

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

    解决方案: 

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

  • 相关阅读:
    android 自定义日历控件
    android 常用类
    真假空格风波
    设计模式的初衷---“委托”有感
    pymysql.err.InterfaceError: (0, '')
    微信文章收藏到有道云笔记PC版只保留了标题
    SQL Server数据库字典生成SQL
    nhibernate常见错误
    NUnit
    使用ffmpeg截取视频
  • 原文地址:https://www.cnblogs.com/mscm/p/13064431.html
Copyright © 2011-2022 走看看