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 = new RetryPolicy<>()
        .handle(SocketException.class)
        .withDelay(Duration.ofSeconds(2))
        .withMaxRetries(3);

Failsafe.with(retryPolicy).run(() -> connect());

熔斷策略定義了當可執行代碼塊執行停止閾值。這能夠幫助系統快速失敗,防止級聯失效以及系統過載。斷路器在以下三個狀態間切換:閉合、打開和半開。

斷路器默認狀態是閉合,此時包裹的代碼塊正常執行。當執行觸及到預設的閾值時,斷路器會進入打開狀態。代碼塊將停止執行,後續的重試都失敗並拋出CircuitBreakerOpenException異常。一旦開放狀態經過指定時間之後,執行環路進入半開狀態,此時會允許少量執行用以探測環路是否應該閉合或者打開。

斷路器同時提供了指標,用以展示當前狀態下執行成功和失敗的次數。

以下代碼片段展示了一個斷路器,它被配置成在5次執行失敗後打開,在重新嘗試閉合前等待1分鐘,當兩次成功執行後閉合:

CircuitBreaker<Object> circuitBreaker = new CircuitBreaker<>()
        .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

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