写点什么

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

评论

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

JAVA concurrency -- ArrayBlockingQueue源码详解

骑牛上青山

Java 源码

动态路由协议(一)

我叫于豆豆吖.

11月月更

JAVA concurrency -- CyclicBarrier 与 CountDownLatch 源码详解

骑牛上青山

Java 源码

L1、L2范数理解--Ridge以及Lasso回归

Studying_swz

深度学习 11月月更

什么是“数字孪生”?有什么价值?

雨果

数字孪生

数据中台选型必读(五):中台建设本质就是构建企业的公共数据层

雨果

数据中台

一场算力集结令,国产芯片如何开启冲刺跑?

脑极体

一次zuul版本升级产生的问题排查记录

骑牛上青山

Java spring 源码 Zuul 生产环境

基于 MQ 的分布式 Serverless 多租任务处理系统架构演进

Apache RocketMQ

消息队列 异步调度 #Serverless 任务

用户体验成为继MAU后,手机银行竞争分化的下一分水岭,易观千帆重磅发布手机银行APP用户体验GX评测

易观分析

App 手机银行

JAVA concurrency -- ReentrantLock 源码详解

骑牛上青山

Java 源码

分布式系统中的哈希算法

骑牛上青山

数据结构 分布式 算法 哈希

这家公司的码农有多牛,用C++重写Kafka,还能与其API兼容

雨果

Kafk

OpenYurt v1.1.0: 新增 DaemonSet 的 OTA 和 Auto 升级策略

阿里巴巴云原生

阿里云 开源 云原生 openyurt

JAVA concurrency -- ThreadLocal 源码详解

骑牛上青山

Java 源码

通过阅读源码解决项目难题:GToken替换JWT实现SSO单点登录

王中阳Go

Go golang 高效工作 学习方法 11月月更

jvm(二)内存管理与虚拟机执行子系统

想要飞的猪

java对象内存布局 jvm加载子系统

动态路由协议(二)

我叫于豆豆吖.

11月月更

图文实录|UIE:基于统一结构生成的通用信息抽取

澜舟孟子开源社区

HIFIVE音加加:多场景音乐版权解决方案,让「用音乐」更便捷

曲多多(嗨翻屋)版权音乐

版权保护 视频后期 数字版权保护

脑机直播 x 赛博驱魔!瑞云专访揭秘胶囊计划国风科幻神作《终极体验》制作幕后...

Renderbus瑞云渲染农场

3D动画 动画制作 瑞云专访

简单时序逻辑电路

芯动大师

Verilog 11月月更 锁存器

OSPF路由协议一

初学者

11月月更

使用gitflow时如何合并hotfix

Geek_pwdeic

数据中台选型必读(四):要想中台建的好,数据模型得做好

雨果

数据中台

国企数字化转型全是坑?看这几个成功案例,减少90%损失

雨果

数字化转型

助力车路云一体化,EMQ在车路协同领域的应用实践

EMQ映云科技

物联网 IoT emq 11月月更 车路协同

爬虫基本原理介绍、实现以及问题解决

石臻臻的杂货铺

爬虫

Redis LRU 内存淘汰算法大有玄机

码哥字节

LRU Redis 6.0

重塑感知,荣耀金洋!金洋奖两项用户体验奖项公布

易观分析

App 手机银行

[力扣] 剑指 Offer 第三天 - 替换空格

陈明勇

Go 数据结构与算法 力扣 11月月更

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