概述
Failsafe 是一个轻量级、无依赖的库,用于处理 Java 8+ 中的故障。它有一个简洁的 API 来处理日常用例,并且具有处理其他所有事情的灵活性。Failsafe 通过将可执行逻辑包装在一种或多种容错策略中来工作,这些策略可以组合和合成以满足需求。
设置
将最新的容错依赖添加到您的项目中。
入门指南
为了了解Failsafe的工作原理,我们将创建一个重试策略,该策略定义了哪些故障需要处理以及何时应进行重试:
RetryPolicy<Object> retryPolicy = RetryPolicy.builder()
.handle(ConnectException.class)
.withDelay(Duration.ofSeconds(1))
.withMaxRetries(3)
.build();
然后我们可以执行一个Runnable或Supplier 带有重试:
// Run with retries
Failsafe.with(retryPolicy).run(() -> connect());
// Get with retries
Connection connection = Failsafe.with(retryPolicy).get(() -> connect());
异步执行
异步执行Runnable或Supplier 以 策略进行操作很简单:
// Run with retries asynchronously
CompletableFuture<Void> future = Failsafe.with(retryPolicy).runAsync(() -> connect());
// Get with retries asynchronously
CompletableFuture<Connection> future = Failsafe.with(retryPolicy).getAsync(() -> connect());
制定政策
多个策略可以任意组合以增加额外的韧性层次或以不同的方式处理不同的故障:
var fallback = Fallback.of(this::connectToBackup);
var circuitBreaker = CircuitBreaker.ofDefaults();
var timeout = Timeout.of(Duration.ofSeconds(10));
// Get with fallback, retries, circuit breaker, and timeout
Failsafe.with(fallback, retryPolicy, circuitBreaker, timeout).get(this::connect);
在制定政策时,顺序确实很重要。请参阅政策制定概述以获取更多详细信息。
容错执行器
策略组合也可以通过FailsafeExecutor保存以备后用:
FailsafeExecutor<Object> executor = Failsafe.with(retryPolicy).compose(circuitBreaker);
executor.run(this::connect);
进一步阅读
阅读更多关于政策及其使用方式的信息,然后在网站菜单中探索Failsafe的其他功能。