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

異常錯誤碼微服務模式下的治理

  •  
  •   L0L · 2023-10-11 22:49:00 +08:00 · 670 次点击
    这是一个创建于 413 天前的主题,其中的信息可能已经有所发展或是发生改变。

    歡迎大家各抒己見

    背景:微服務,單元化架構中,開發語言是 Java

    場景: 1 、服務之間存在多種調用,服務 A->服務 B->服務 C ; 2 、每一個服務都有對應的錯誤碼編號;服務 A:000 ~ 099 ,服務 B:100 ~ 199 ,服務 C:200 ~ 299 ; 3 、x99 爲各個服務的未知異常。

    問題:服務 C 如果發生了 RuntimeException 時,但是服務 C 的開發同學沒有考慮到異常情況,服務 C 直接拋出了該異常,這時系統該如何優雅的通知調用方最爲合適呢?

    方案: 1 、服務 C 利用框架的擴展能力,將錯誤碼修改爲服務 C 的錯誤碼 399 ,拋出給調用系統; 2 、服務 A 在返回給調用方前,判讀異常是否爲可識別的異常(包含錯誤碼的異常);否則進行包裝,返回錯誤碼 099 。

    思考:

    • 方案 1 優點:中的這種情況,將服務側的異常,統一轉化爲服務內部的錯誤信息,實現了服務內的錯誤碼自治;
    xuanbg
        1
    xuanbg  
       2023-10-12 08:57:22 +08:00
    错误代码并不关键。因为绝大部分的情况下,你仅能告诉用户出错了。而且,大多数的错误,你甚至无法告知用户出错的原因。

    只有极少数的情况,你能够并期望用户可以明确地做出响应。只有这种情况需要安排特定的错误代码,其余情况,更加有用的是错误消息而不是错误代码。也就是说,一个错误代码,不同或者相同的错误消息(你无法告知具体错误原因的时候)几乎就能应对 99.99%的异常了。然后,针对具体的几个期望客户端能够作出正确的应对策略的异常,约定独特的错误代码即可。
    L0L
        2
    L0L  
    OP
       2023-10-12 09:50:14 +08:00
    @xuanbg 能做到提示用户的错误码,感觉必须要加一层处理层;毕竟总会出现莫名其妙的问题,需要通过一些手段来应急。
    遇事不决,加一层
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3144 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:34 · PVG 22:34 · LAX 06:34 · JFK 09:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.