写点什么

Java 库 Failsafe 2.0 发布,支持组合弹性策略

  • 2019-04-20
  • 本文字数:1217 字

    阅读完需:约 4 分钟

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 = new RetryPolicy<>()        .handle(SocketException.class)        .withDelay(Duration.ofSeconds(2))        .withMaxRetries(3);
Failsafe.with(retryPolicy).run(() -> connect());
复制代码


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


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


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


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


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


2019-04-20 08:005903

评论

发布
暂无评论
发现更多内容

鸿蒙Next动态添加删除布局

auhgnixgnahz

鸿蒙Next

鸿蒙Next数据面板组件DataPanel介绍

auhgnixgnahz

鸿蒙Next

鸿蒙Next使用AudioCapturer实现音频录制和AI语言转文字

auhgnixgnahz

鸿蒙Next

Flutter驱动的小程序化开发范式:跨端组装式App的高效实践路径

xuyinyin

鸿蒙Next自定义双滑块滑动条实现方案

auhgnixgnahz

鸿蒙Next

鸿蒙Next使用AVRecorder录制和播放音频

auhgnixgnahz

鸿蒙Next

鸿蒙Next应用桌面快捷操作shortcuts和Form卡片介绍

auhgnixgnahz

鸿蒙Next

鸿蒙Next层叠布局使用Stack还是RelativeContainer?

auhgnixgnahz

鸿蒙Next

鸿蒙Next画布Canvas基础使用演示

auhgnixgnahz

鸿蒙Next

大数据-21 Sqoop 数据迁移 ETL工具 MySQL与Hive数据互相迁移 导入导出

武子康

大数据 hadoop spark hive sqoop

鸿蒙Next进度条组件Progress的使用

auhgnixgnahz

鸿蒙Next

鸿蒙Next数据量环形图标Gauge介绍

auhgnixgnahz

鸿蒙Next

MindIE服务化性能MindIE service如何调优?限制非首token时延的极限吞吐

zjun

性能优化 模型推理 Ascend NPU

抢赚万元政策红利,中小企业数字化转型的破局之道

禅道项目管理

数字化转型 企业管理 项目管理软件 数字化转型咨询

鸿蒙Next轮播组件Swiper使用了解

auhgnixgnahz

鸿蒙Next

鸿蒙Next显示动画animateTo介绍

auhgnixgnahz

鸿蒙Next

鸿蒙Next实现仿抖音点赞动画功能

auhgnixgnahz

鸿蒙Next

Ascend如何测试集合通信(HCCL)的功能正确性以及性能?

zjun

昇腾 模型推理 Ascend

MindIE服务化性能MindIE service如何调优?不考虑时延的极限吞吐场景

zjun

昇腾 模型推理 Ascend

鸿蒙Next文件读写操作支持写入汉字等符号

auhgnixgnahz

鸿蒙Next

鸿蒙Next滑动条Slider详细总结一文了解

auhgnixgnahz

鸿蒙Next

智慧停车场系统(源码+文档+讲解+演示)

深圳亥时科技

鸿蒙Next使用ArkUI-X跨平台开发体验

auhgnixgnahz

鸿蒙Next

鸿蒙Next文件下载RCP单线程和多线程使用对比

auhgnixgnahz

鸿蒙Next

鸿蒙Next软键盘弹出避让机制介绍

auhgnixgnahz

鸿蒙Next

鸿蒙Next文本输入TextInput事件回调总结

auhgnixgnahz

鸿蒙Next

鸿蒙Next使用Canvas绘制一个汽车仪表盘

auhgnixgnahz

鸿蒙Next

终止分区表变更操作时误删数据字典缓存导致MySQL崩溃分析

GreatSQL

鸿蒙Next地图服务Map在露天矿山中的使用分享

auhgnixgnahz

鸿蒙Next

鸿蒙Next选择按钮Toggle、Checkbox、Radio介绍

auhgnixgnahz

鸿蒙Next

MindIE服务化性能MindIE service如何调优?首token时延限制严格,非首token时延也有限制

zjun

昇腾 模型推理 Ascend NPU

Java库Failsafe 2.0发布,支持组合弹性策略_语言 & 开发_Uday Tatiraju_InfoQ精选文章