限时领|《AI 百问百答》专栏课+实体书(包邮)! 了解详情
写点什么

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

评论

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

华为云ECS,如何助力数字化企业创新发展

爱尚科技

京东T8连夜肝出的《JVM性能优化知识点》吊打所有提问的面试官

小二,上酒上酒

性能优化 JVM Java虚拟机

华为云ECS,去除现代化企业服务器的数据安全忧虑

爱尚科技

清华年薪百万大佬,带你深入JVM实战调优,看完还敢说你懂JVM

小二,上酒上酒

Java 马士兵

来了!Spring Boot从入门到入土的私藏教程,不收藏你就亏了

小二,上酒上酒

spring springboot

企业为什么需要UI快速开发框架

力软低代码开发平台

技术分享| 基于 Etcd 的分布式锁实现原理及方案

anyRTC开发者

分布式 etcd 存储系统

在 Java 代码中来一段 JavaScript?聊聊 Flowable 中的脚本任务

江南一点雨

Java springboot workflow flowable

Nodejs:ESModule和commonjs,傻傻分不清

coder2028

node.js

华为云ECS,弹性伸缩按需选择,让企业以更低成本享受云服务

爱尚科技

Webpack完整打包流程分析

Geek_02d948

webpack

Webpack中的高级特性

Geek_02d948

webpack

员工离职率高如何解决?

优秀

企业管理 员工离职

太厉害了!阿里年薪120W架构师整理的学习笔记,看完收获良多

小二,上酒上酒

Java 架构 微服务 高并发

【文本检测与识别白皮书-3.2】第一节: 基于分割的场景文本识别方法

合合技术团队

人工智能 文字识别 文字检测 智能识别

特征平台在数禾的建设与应用

阿里云大数据AI技术

sql 大数据 flink 企业号十月 PK 榜

腾讯T4耗时36天整理出了:多线程+JVM+设计模式+Redis+MySQL

小二,上酒上酒

MySQL redis JVM 多线程

京东T8架构师墙裂推荐:史上最全高性能MySQL实战(赶紧收藏)

小二,上酒上酒

Vue中的diff算法深度解析

yyds2026

Vue

Go语言入门07—指针

良猿

Go golang 后端 10月月更

javascript尾递归优化

hellocoder2029

JavaScript

重塑感知,荣耀金洋,银行APP用户体验外滩峰会相聚上海

易观分析

银行 峰会 上海

Vue响应式依赖收集原理分析-vue高级必备

yyds2026

Vue

一站式全覆盖数据 I/O 平台 - Alluxio 与 Aunalytics 的完美结合

Alluxio

分布式 presto Alluxio 大数据 开源 #开源

Nodejs相关ORM框架分析

coder2028

node.js

javascript 高级编程 之 Array 用法总结

hellocoder2029

JavaScript

融云一站式「云市场」上线,携手生态伙伴,共建价值平台

融云 RongCloud

通讯协议 市场 CND

华为云ECS,弹性云服务器标杆,众多企业的共同选择

爱尚科技

太厉害了!GitHub上标星80K的微服务实战笔记,看完跪了

小二,上酒上酒

Java 微服务

阿里架构师耗时三个月整理的 Spring实战笔记:入门到实战

小二,上酒上酒

spring

js通过经纬度来计算两地之间的距离

源字节1号

微信小程序 软件开发 前端开发 后端开发

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