最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

评论

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

架构师训练营-第1周学习总结(1期)

阿甘

UML

架构师训练营第 0 期 期末大作业

无名氏

面试常考算法题之 Top K 问题

小齐本齐

数据结构 算法

查找数组中最大值的5种方法!(动图演示)

王磊

Java 面试

金融企业敏捷转型大咖风采 | 中国出口信用保险公司的 DevOps 落地之道

Atlassian

项目管理 DevOps 敏捷 行业资讯 Atlassian

繁星计划将成为引领全球币值管理的带动计划!

InfoQ_967a83c6d0d7

Java面试史上最全的JAVA专业术语面试100问 (前1-50)

Java架构师迁哥

应对高并发系统有没有通用的解决方案呢?

架构师修行之路

架构 高并发 异步

介绍

剑心

学习

架构师训练营-第1周课后作业(1期)

阿甘

架构师训练营 - 大作业

张明森

随想之UI+API

云杉

我是如何从0到1完成一个简单的中间件(1)

sinsy

Java 中间件

Clickhouse在大数据分析平台-留存分析上的应用

腾讯云大数据

大数据

两年Java开发经验赶上金九招聘季涨到23K,这究竟是怎么做到的?

Java架构师迁哥

Week 13 命题作业

Jeremy

anyRTC RTSP转WebRTC方案

anyRTC开发者

音视频 WebRTC 直播 RTC 安卓

对比 Redis 中 RDB 和 AOF 持久化

超超不会飞

读书笔记之《普罗普:故事形态学》

AI代笔

哈哈,成为作者了

大海

oeasy 教您玩转 linux 010215 随机谚语 fortune

o

java安全编码指南之:字符串和编码

程序那些事

安全编码指南 java安全编码 java安全编码指南

第六周学习总结

Vincent

极客时间 极客大学

Apache Pulsar 在腾讯 Angel PowerFL 联邦学习平台上的实践

Apache Pulsar

Apache 学习 开源 Apache Pulsar

甲方日常 15

句子

工作 随笔杂谈 日常

Golang领域模型-资源库

奔奔奔跑

微服务 领域驱动设计 DDD Go 语言

第六周作业

Vincent

极客时间 极客大学

百度大脑6.0重磅升级 不断进阶中的中国AI底座实力尽显

脑极体

Week 13 学习总结

Jeremy

血的教训!千万别在生产使用这些 redis 指令

楼下小黑哥

Java redis 生产事故

再深入一点|binlog和relay-log到底长啥样?

艾小仙

Java MySQL 数据库 架构设计

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