Feign Fallback FallbackFactory 筆記

關於使用請查看 :https://blog.csdn.net/sun_shaoping/article/details/82079287

 

什麼時候應該Fallback

2XX,成功,這個不用再討論。
5XX,也相當明確,直接Fallback,這個也不用討論。
4XX,可以一律認爲是業務邏輯異常(或者更精確的說,可以認爲4XX中的某幾個是業務異常)。這時候,應該是用if/else來處理這個異常,而不應該動用Hystrix來Fallback。

Feign在默認情況下,對於非2XX,都認爲是異常。這個地方是有問題的。特別是對於404這種非常容易拋出的業務異常來說,沒兩下就circuit break了。

@FeignClient(name = "marathon-lb", fallback = FooBarClientFallback.class, decode404 = true)
@RequestMapping(value = "/foo/bar")
public interface FooBarClient {
    ... ...
}
只需要加入decode404 = true這一個參數,Feign對於2XX和404 ,都不會走Fallback了。
排除404,已經基本上夠用了,如果想把409、400等status也加到例外中,可以重寫一下Feign的errorDecoder。
 

REST返回碼的選擇

下面詳細講一下HTTP STATUS的選擇問題。

關於HTTP返回碼,看了很多參考(論戰),"大概"可以這樣選擇:

成功: 2XX系列

  • 200 OK // 查詢、刪除成功用這個
  • 201 CREATED // 新增、修改時用這個。且返回BODY中無任何信息。

業務異常: 4XX系列

  • 400 BAD_REQUEST // 現在有很多人在業務異常時拋這個錯。但400要慎重使用。稍後解釋。
  • 404 NOT_FOUND // 查詢不到結果時用這個
  • 403 FORBIDDEN // 這個也慎重使用。
  • 409 CONFLICT // 業務異常時,可以用這個。

主機異常:5XX系列

  • 500 INTERNAL_SERVER_ERROR // 對於未知異常,統一用這個了
  • 503 SERVICE_UNAVAILABLE // Hystrix異常用這個

 

參考:https://www.jianshu.com/p/8d47a4fc4e82

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章