Resilience4j是專為Java8和函數語言程式設計設計的容錯庫
Netflix OSS的Hystrix替代品, Resilience4j是一個輕量級容錯庫,受ofollow,noindex" target="_blank">Netflix Hystrix 啟發,但專為Java 8和函數語言程式設計而設計。輕量級,因為庫只使用Vavr(以前稱為Javaslang) ,它沒有任何其他外部庫依賴項。相比之下,Netflix Hystrix對Archaius 具有編譯依賴性,Archaius 具有更多外部庫依賴性,例如Guava和Apache Commons Configuration。使用Resilience4j,你不必全押,你可以選擇你需要的東西。
與Netflix Hystrix的一些差異:
- 在Hystrix中,對外部系統的呼叫必須包含在HystrixCommand中。相比之下,本庫包提供了高階函式(裝飾器),以通過斷路器 ,速率限制器或隔板增強任何函式介面,lambda表示式或方法引用。此外,庫提供的裝飾器來重試失敗的呼叫或快取呼叫結果。您可以在任何函式介面、lambda表示式或方法引用上堆疊多個裝飾器。這意味著,您可以將隔板Bulkhead,RateLimiter和Retry裝飾器與CircuitBreaker裝飾器結合使用。優點是您可以選擇所需的裝飾器,而不是其他任何東西。任何修飾函式都可以使用CompletableFuture或RxJava同步或非同步執行。
- 預設情況下,Hystrix將執行結果儲存在10個1秒的視窗桶中。如果傳遞1秒視窗桶,則會建立一個新桶,並刪除最舊的桶。該庫將執行結果儲存在Ring Bit Buffer中,而沒有統計滾動時間視窗。成功的呼叫儲存為0位,失敗的呼叫儲存為1位。Ring Bit Buffer具有可配置的固定大小,並將這些位儲存在long []陣列中,與布林陣列相比,這節省了記憶體。這意味著Ring Bit Buffer只需要一個包含16個長(64位)值的陣列來儲存1024個呼叫的狀態。優點是這個CircuitBreaker可以為低頻和高頻後端系統提供開箱即用的功能,因為在傳遞時間視窗時不會丟棄執行結果。
- Hystrix僅在處於半開狀態時執行單次執行,以確定是否關閉CircuitBreaker。該庫允許執行可配置數量的執行,並將結果與可配置閾值進行比較,以確定是否關閉CircuitBreaker。
- 該庫提供自定義RxJava運算子來裝飾任何Observable或Flowable使用Circuit Breaker,Bulkhead或Ratelimiter。
- Hystrix和此庫發出一系列事件,這些事件對系統操作員有用,可監控有關執行結果和延遲的指標。