V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
1cming
V2EX  ›  Java

服务化的系统, provider 和 consumer 之间异常的协议如何约定?

  •  
  •   1cming · 2019-08-04 11:22:06 +08:00 · 2650 次点击
    这是一个创建于 1941 天前的主题,其中的信息可能已经有所发展或是发生改变。

    两种方式:

    1.抛出异常,向上传递
    2.错误码

    大家支持哪种?理由是什么?

    附一个 dubbo 官网的片段:

    异常

    建议使用异常汇报错误,而不是返回错误码,异常信息能携带更多信息,并且语义更友好。

    如果担心性能问题,在必要时,可以通过 override 掉异常类的 fillInStackTrace() 方法为空方法,使其不拷贝栈信息。

    查询方法不建议抛出 checked 异常,否则调用方在查询时将过多的 try...catch,并且不能进行有效处理。

    服务提供方不应将 DAO 或 SQL 等异常抛给消费方,应在服务实现中对消费方不关心的异常进行包装,否则可能出现消费方无法反序列化相应异常。

    2 条回复    2019-08-16 17:54:17 +08:00
    cmonkey
        1
    cmonkey  
       2019-08-16 16:12:04 +08:00
    要是提供者和消费者不是统一语言怎么办
    1cming
        2
    1cming  
    OP
       2019-08-16 17:54:17 +08:00
    @cmonkey
    暂时不考虑跨语言的问题,跨语言可能就考虑 Thrift 了。
    另外说到跨语言其实根本上还是在说异构系统之间的交互,异构系统之间用错误码没有疑问。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3230 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 13:21 · PVG 21:21 · LAX 05:21 · JFK 08:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.