50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

评论

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

为什么说IO密集型业务,线程数是CPU数的2倍?

Java永远的神

程序员 程序人生 后端 cpu io

基于 EventBridge API Destination 构建 SaaS 集成实践方案

阿里巴巴云原生

阿里云 云原生 EventBridge

架构实战营 - 写出外包学生管理系统的架构文档

huiwen

架构实战营

vivo 实时计算平台建设实践

vivo互联网技术

大数据 flink 实时计算

如何用弹出对话框实现登录页非空提示?

Towify

网络拥堵?上网体验差,还不赶紧看看华为云CDN!

i生活i科技

CDN

性能测试技术笔记(二):如何准备测试环境和数据

老张

性能测试

市面上到底有没有免费的云渲染平台?

Renderbus瑞云渲染农场

云渲染 云渲染平台 免费云渲染平台

SpringBoot 自动装配原理,一文掌握!

程序员小毕

源码 程序员 面试 springboot 自动装配

一些Web安全漏洞

穿过生命散发芬芳

HTTP 1月月更

机器学习服务活体检测算法荣获CFCA权威安全认证

HarmonyOS SDK

HMS Core

模块四作业

张贺

架构训练营

爱奇艺:基于龙蜥与 Koordinator 在离线混部的实践解析 | 龙蜥技术

阿里巴巴云原生

阿里云 云原生 Koordinator

阿里云 ACK One 多集群管理再升级:GitOps 多集群持续集成,统一报警管理

阿里巴巴云原生

阿里云 云原生 容器服务

架构训练营模块三作业

gigifrog

架构训练营

华为云弹性负载均衡服务,赋能现代企业加速发展

i生活i科技

ELB

再快一点?动态内容如何加速

蔡农曰

程序员 互联网

云存储生态构建的技术基因和最佳实践

云布道师

阿里云 云存储

创业邦2022中国未来独角兽100强揭晓:总估值超3000亿元,累计融资总额达685亿元;红杉中国、顺为资本成年度最佳捕手

创业邦

RelativeLayout(相对布局)

芯动大师

Android Studio padding margin

中国北京|HICOOL 2023 全球创业大赛

科兴未来News

Hicool 海外 #双创赛事#

如何导入本地数据?

Towify

云原生技术在离线交付场景中的实践

北京好雨科技有限公司

Kubernetes 云原生交付 离线交付

Wallys/QCN9074 WiFi 6E Card OpenWRT, IPQ6010,802.11ax/Support:QUECTEL RM500Q-GL/QCN9074 11ax 4x4 6G M.2

wallysmeng

下载速度慢怎么办?使用华为云CDN,让网速更快更稳

i生活i科技

CDN

2023-01-03:超过5名学生的课。编写一个SQL查询来报告 至少有5个学生 的所有班级,返回结果不限顺序。请问sql语句如何写? +---------+ | class | +-----

福大大架构师每日一题

数据库 sql 福大大

外包学生管理系统详细架构设计文档

Geek_7d539e

华为云CDN,多场景网络加速服务,为企业发展强势赋能

i生活i科技

CDN

下载速度不尽人意,华为云CDN来助力,尽享高速体验!

i生活i科技

CDN

Java高手速成│实战:应用数据库和GUI开发产品销售管理软件(2)

TiAmo

数据库 Java、 JDBC

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