關於使用請查看 :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