应对复杂故障问题的简单故障处理库包:Failsafe

16-07-28 banq
    

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>

下面是使用retryPolicy执行一个Runnable或Callable实现重试:

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

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

Java 6和7也支持:

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

断路器功能可使用在微服务架构中防止服务访问过载:

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

通过Runnable或Callable执行这个断路器:

Failsafe.with(breaker).run(this::connect);
<p>

当你配置了一个断路器的执行失败阀值时,一旦达到这个阀值,断路器就会打开,抛出circuitbreakeropenexception,一段延迟后,断路器处于半开状态,再次尝试执行,以确定当前断路器是应该再次关闭或打开,如果尝试执行满足了成功阀值,那么断路器就会再次关闭,通过其的业务执行恢复正常。

更多详细使用见:

jhalterman/failsafe: Simple, sophisticated failure

[该贴被banq于2016-07-28 10:55修改过]

    

1