Java 庫 Failsafe 2.0 釋出,支援組合彈性策略
用於處理失敗的零依賴 Java 庫Failsafe 釋出了其 2.0 版本,支援組合彈性策略,提供了一個用於自定義策略服務提供者的可插拔架構。Failsafe 2.0 版本支援的最低 Java 版本為 Java 8。
該庫為 Java 應用提供了流暢靈活的 API 用於處理失敗。這個功能通過將可執行程式碼塊包在可組合彈性策略 中實現。根據發 布 說明 ,2.0 版本針對可組合彈性策略帶來了功能提升、行為變更、API 變更和 API 增加。
Failsafe 提供了 3 個主要彈性策略:重試策略、熔斷策略和後備策略。
重試策略定義了可執行程式碼塊在何種失敗場景下需要重試。API 提供了許多配置選項,例如最大重試次數、重試等待間隔和指數級重試延時,便於開發者調優重試策略。
下面的程式碼片段展示了一個重試策略,該策略在失敗後會重試 3 次,每次間隔 2 秒:
複製程式碼
RetryPolicy<Object> retryPolicy =newRetryPolicy<>() .handle(SocketException.class) .withDelay(Duration.ofSeconds(2)) .withMaxRetries(3); Failsafe.with(retryPolicy).run(()-> connect());
熔斷策略定義了當可執行程式碼塊執行停止閾值。這能夠幫助系統快速失敗,防止級聯失效以及系統過載。斷路器在以下三個狀態間切換:閉合、開啟和半開。
斷路器預設狀態是閉合,此時包裹的程式碼塊正常執行。當執行觸及到預設的閾值時,斷路器會進入開啟狀態。程式碼塊將停止執行,後續的重試都失敗並丟擲 CircuitBreakerOpenException 異常。一旦開放狀態經過指定時間之後,執行環路進入半開狀態,此時會允許少量執行用以探測環路是否應該閉合或者開啟。
斷路器同時提供了指標,用以展示當前狀態下執行成功和失敗的次數。
以下程式碼片段展示了一個斷路器,它被配置成在 5 次執行失敗後開啟,在重新嘗試閉合前等待 1 分鐘,當兩次成功執行後閉合:
複製程式碼
CircuitBreaker<Object> circuitBreaker =newCircuitBreaker<>() .handle(SocketException.class) .withFailureThreshold(5) .withSuccessThreshold(2) .withDelay(Duration.ofMinutes(1)); Failsafe.with(circuitBreaker).run(()-> connect());
後備策略描述了當發生失敗時的備用處理方式。該策略可以用於抑制異常,並提供一個預設值或者丟擲自定義異常。
以下程式碼片段展示了一個後備策略,當發生失敗時將會執行另一個方法:
複製程式碼
Fallback<Object> fallback =Fallback.of(this::connectToLocal);
所有彈性策略都可以通過適當方式組合成新的組合策略。一個典型的組合是使用一個後備策略作為最外層策略,一個斷路器作為最內層策略,在二者中間設定一個重試策略。例如:
複製程式碼
Failsafe.with(fallbackPolicy, retryPolicy, circuitBreaker);
除了這些內建策略,Failsafe 2.0 提供了策略服務提供介面用於插入自定義策略。該庫還提供了一些額外的特性 ,例如可配置執行排程器、事件監聽器、非同步執行支援和執行追蹤。
Failsafe 當前版本是2.0.1 ,該版本於上個月在 GitHub 上釋出。
檢視英文原文:Failsafe 2.0 Released With Composable Resilience Policies