應對複雜故障問題的簡單故障處理庫包:Failsafe

banq發表於2016-07-28
Failsafe是一個輕量 零依賴的處理故障失敗等問題的開源庫包,目的是儘可能簡單易用,用一種簡潔的API來處理每天系統執行情況並靈活處理。

Failsafe的故障保護功能有:
1. Retries重試
2. Circuit breakers斷路器
3.Fallback
4.執行上下文Execution context
5.Event listener事件監聽器
6.非同步API整合
7.CompletableFuture 和函式介面整合
8.Execution tracking執行故障跟蹤

支援Java 6+以上版本。

Failsafe核心功能是重試,首先需要定義一個 RetryPolicy用來指定重試的情況:

RetryPolicy retryPolicy = new RetryPolicy()
  .retryOn(ConnectException.class)
  .withDelay(1, TimeUnit.SECONDS)
  .withMaxRetries(3);
<p class="indent">


下面是使用retryPolicy執行一個Runnable或Callable實現重試:

// Run with retries
Failsafe.with(retryPolicy).run(() -> connect());

// Get with retries
Connection connection = Failsafe.with(retryPolicy).get(() -> connect());
<p class="indent">


Java 6和7也支援:

Connection connection = Failsafe.with(retryPolicy).get(new Callable<Connection>() {
  public Connection call() {
    return connect();
  }
});
<p class="indent">


斷路器功能可使用在微服務架構中防止服務訪問過載:

CircuitBreaker breaker = new CircuitBreaker()
  .withFailureThreshold(3, 10)
  .withSuccessThreshold(5)
  .withDelay(1, TimeUnit.MINUTES);
<p class="indent">


透過Runnable或Callable執行這個斷路器:

Failsafe.with(breaker).run(this::connect);
<p class="indent">

當你配置了一個斷路器的執行失敗閥值時,一旦達到這個閥值,斷路器就會開啟,丟擲circuitbreakeropenexception,一段延遲後,斷路器處於半開狀態,再次嘗試執行,以確定當前斷路器是應該再次關閉或開啟,如果嘗試執行滿足了成功閥值,那麼斷路器就會再次關閉,透過其的業務執行恢復正常。

更多詳細使用見:

jhalterman/failsafe: Simple, sophisticated failure

[該貼被banq於2016-07-28 10:55修改過]

相關文章