SpringCloud-Hystrix-如何使用Fallback


先介紹一下我所在的團隊使用Fallback的使用方式
  • FallBack的返回內容是null或者一個空集合,如下代碼所示
public class ProductClientFallBack implements SdbProductClient {

    @Override
    public List<ProductVO> queryAllProducts() {
        return Lists.newArrayList();
    }

    @Override
    public ProductVO getProductById(int productId) {
        return null;
    }
}
  • Fallback文件由服務方提供
  • 針對現行的使用方式我產生了兩個疑問/問題
FallBack方法中直接返回null或者空集合這樣真的好嗎?
  • 直接返回null或者空集合會導致調用方無法區分null和空集合是來源於正常的業務邏輯還是發生了降級,這樣使用很容易造成問題的難以追蹤
  • 那么如何解決這個問題呢,可以參考以下代碼,方法返回一個包裝的Response或者特殊的Exception
    @Override
    public Response<Integer> uploadProductJob(List<ProductJob> productJobList) {
        return ResponseUtil.makeError(ErrorCode.CLIENT_SERVER_ERROR);
    }
FallBack 應該由服務方提供,還是在調用方來提供
  • 答案並不固定,分以下場景
第一種情況,大部分接口都有降級邏輯,並且多個調用方使用同一套降級邏輯;這種情況下FallBack由服務方提供,這樣可以省去調用方之間出現復制代碼的情況,但是這樣存在一個很嚴重的問題,就是復雜的降級邏輯會引用到其他包,可能會引發相互依賴的問題,所以這種情況下是放在服務方還是調用方還需要靈活的做一下決策
第二種情況,大部分接口都有降級邏輯,並且多個調用方使用不同的降級邏輯;這種情況下FallBack文件放在調用方,由於調用方使用的是不同的降級邏輯,那么服務方就無法提供個性化的降級方案了
第三種情況,大部分接口都沒有降級邏輯;這種情況下FallBack文件由服務方提供即可,如個別接口需要有降級邏輯,在調用方實現降級邏輯即可;其中FallBack方法的返回內容,直接返回一個特殊的Exception或者特殊的Response;據我了解大部分技術團隊都是這樣用的,這樣用起來簡單、方便、直接一些


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM