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

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);

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


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

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

Java 6和7也支持:


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

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


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

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


Failsafe.with(breaker).run(this::connect);

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

更多详细使用见:
jhalterman/failsafe: Simple, sophisticated failure
[该贴被banq于2016-07-28 10:55修改过]