速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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:005704

评论

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

【FAQ】HarmonyOS SDK 闭源开放能力 —Remote Communication Kit

HarmonyOS SDK

harmoyos

Alibaba Cloud Linux:助力太保科技整体云平台0故障,提效30% | 龙蜥案例

OpenAnolis小助手

操作系统 龙蜥社区 龙蜥案例

Veeam Backup & Replication 12.3 (Windows) - 备份和恢复

sysin

veeam backup

在外包干了七年,废了......

Summer

Java 编程 程序员 面试 架构师

C++对象模型实践探索

快乐非自愿限量之名

c++

超 90% 研发人员使用通义灵码,盖雅工场打造研发提效驾驶舱

阿里云云效

阿里云 云原生 通义灵码

如何提升出海企业访问海外站点的速度?

Ogcloud

海外网络加速 国际网络专线 网络专线

【低代码】低代码平台协同&敏捷场景下的并行开发解决方案探索

京东科技开发者

百度商业系统升级为“百度伴飞”,将释放10倍商业空间、延伸3倍经营时间

Geek_2d6073

中国零售时装品牌商品数字化转型挑战与路径

第七在线

深入理解 Go 高性能网络框架 nbio

俞凡

golang

如何看待现在的Java面试变成八股文?

了不起的程序猿

Java 程序员 架构师 java面试 八股文

天翼云与百川智能达成战略合作,共同推进模型行业创新应用!

天翼云开发者社区

人工智能 云计算 云服务

探索未来之路,激发AI创新活力!“天翼云息壤杯”高校AI大赛北京区域赛开赛!

天翼云开发者社区

云计算 AI 天翼云

企业数字化转型部署SD-WAN的6大好处

Ogcloud

数字化转型 企业数字化转型 SD-WAN SD-WAN组网 SD-WAN服务商

SonarQube Server 10.8 发布,新增功能概览

sysin

SonarQube

文小言累计调用量超35亿次,计划接入法律、票务、电商等30+AI服务化功能

Geek_2d6073

“天翼云息壤杯”高校AI大赛云南赛区启动!

天翼云开发者社区

云计算 AI 天翼云

远程面试阿里、蚂蚁、京东、美团后整理份283页Java核心面试宝典!

Summer

Java 编程 程序员 面试 架构师

CFD专栏丨HyperMesh CFD功能详解:后处理功能Part 1

Altair RapidMiner

仿真 altair Hypermesh CFD

低代码技术普及,中国企业数字化门槛持续降低

EquatorCoco

低代码

AIGC项目中的【模板进程】方案的设计实践

京东科技开发者

Java内卷严重,普通程序员如何杀出重围?

开心学Java

Java 后端 架构师 java面试 八股文

21位优秀学生代表颁发结课证书,开放原子校源行(天津大学站)成功举办

OpenAnolis小助手

开源 操作系统 龙蜥高校行

从DevOps状态报告看技术团队的文化建设

京东科技开发者

一天开发属于自己的体育直播平台,5步方法!

软件开发-梦幻运营部

Spark任务OOM问题如何解决?

EquatorCoco

Java spark

Redis探秘Sentinel(哨兵模式)

不在线第一只蜗牛

redis

1688商品详情数据接口(1688.item_get)丨1688API接口代码指南

tbapi

1688商品详情接口 1688API 1688商品数据采集

今日分享 | 初识inBuilder业务查询语言-BQL

inBuilder低代码平台

低代码

【案例分享】思牧科技:赋能智能物流行业,中邮信源的零代码数字化之路

明道云

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