写点什么

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

评论

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

C++输入流和输出流介绍

芯动大师

Golang微服务框架Kratos应用RocketMQ消息队列

golang RocketMQ 消息队列 Kratos #微服务

《操作系统实战 45 讲》笔记5——接口与虚化

袁世超

操作系统 Cosmos LMOS

蓝易云:常用环境部署—Docker安装RocketMQ教程!

百度搜索:蓝易云

Docker 云计算 Linux RocketMQ 语文内

TiDB 7.1.0 LTS 特性解读丨关于资源管控 (Resource Control) 应该知道的 6 件事

PingCAP

数据库 TiDB

[文本提取]基于Apache Tika的文本内容提取

alexgaoyh

Java nlp tika 文本提取 内容提取

区块链数字货币支付交易系统开发,承兑商币支付搭建

V\TG【ch3nguang】

API网关是如何提升API接口安全管控能力的?

不思jo

安全 API

演讲实录:DataFun 垂直开发者社区基于指标平台自主洞察北极星指标

Kyligence

数据分析 指标中台

【GO】LGTM_Grafana_gin_trace中间件(3)_代码实操

非晓为骁

golang Grafana Trace gin tempo

蓝易云:Linux常见漏洞修复教程!

百度搜索:蓝易云

云计算 Linux 运维 云服务器

Golang微服务框架Kratos应用MQTT消息队列

golang mqtt Kratos #微服务

Golang微服务框架Kratos应用NSQ消息队列

golang nsq Kratos #微服务

华为云,让AI算力入山河

脑极体

云计算

合约交易系统App开发,数字货币交易系统搭建

V\TG【ch3nguang】

医疗虚拟仿真和虚拟现实有什么区别?哪个更好?

3DCAT实时渲染

虚拟现实 虚拟仿真 实时云渲染

合约跟单交易所开发搭建

V\TG【ch3nguang】

Golang微服务框架Kratos应用Pulsar消息队列

golang pulsar Kratos #微服务

Golang微服务框架Kratos应用Kafka消息队列

golang kafka Kratos 消息列队 #微服务

苹果电脑版文件搜索推荐 HoudahSpot激活中文最新

胖墩儿不胖y

Mac软件 文件搜索 搜索工具 mac文件搜索软件 文件搜索软件

LP流动性挖矿defi质押挖矿软件开发,链上挖矿平台搭建

V\TG【ch3nguang】

Golang微服务框架Kratos应用NATS消息队列

golang 消息队列 Kratos #微服务

下一个时代的船舵,李彦宏握住AI原生应用

脑极体

AI

华为发布全面自研密码套件及全场景智慧前端框架开源项目

科技热闻

华为“轻松打卡全世界”活动提供一站式出境服务,全球酒店预订85折起

最新动态

CIIS 2023丨聚焦文档图像处理前沿领域,合合信息AI助力图像处理与内容安全保障

合合技术团队

人工智能 文档 智能 多模态 大模型

沉浸式体验与 AI 数智助理一起工作的一天

Kyligence

人工智能 数据分析

多模态 多引擎 超融合 新生态!2023亚信科技AntDB数据库8.0产品发布

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库

Golang微服务框架Kratos应用RabbitMQ消息队列

golang RabbitMQ Kratos #微服务

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