转载

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

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

熔断策略定义了当可执行代码块执行停止阈值。这能够帮助系统快速失败,防止级联失效以及系统过载。断路器在以下三个状态间切换:闭合、打开和半开。

断路器默认状态是闭合,此时包裹的代码块正常执行。当执行触及到预设的阈值时,断路器会进入打开状态。代码块将停止执行,后续的重试都失败并抛出 CircuitBreakerOpenException 异常。一旦开放状态经过指定时间之后,执行环路进入半开状态,此时会允许少量执行用以探测环路是否应该闭合或者打开。

断路器同时提供了指标,用以展示当前状态下执行成功和失败的次数。

以下代码片段展示了一个断路器,它被配置成在 5 次执行失败后打开,在重新尝试闭合前等待 1 分钟,当两次成功执行后闭合:

复制代码

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

原文  https://www.infoq.cn/article/eXMvMMejJJ-iGHGAYN5D
正文到此结束
Loading...