介绍

Failsafe 是一个轻量级的零依赖库,用于处理 Java 8+ 中的故障。

依赖

<!-- https://mvnrepository.com/artifact/net.jodah/failsafe -->
<dependency><groupId>net.jodah</groupId><artifactId>failsafe</artifactId><version>2.4.4</version>
</dependency>

使用

策略包括retry(重试), circuit breaker(断路器), rate limiter(速率限制器), timeout(超时), bulkhead, fallback(回调)

创建一个策略

RetryPolicy<Object> retryPolicy = RetryPolicy.builder().handle(ConnectException.class).withDelay(Duration.ofSeconds(1)).withMaxRetries(3).build();

RetryPolicy<Object> retryPolicy = new RetryPolicy<>().handle(Exception.class).withDelay(Duration.ofSeconds(10)).withMaxRetries(10).onFailedAttempt(e -> log.error("Fail to create kafka producer.", e.getLastFailure())).onRetry(e -> log.warn("Failure #{}: trying again.", e.getAttemptCount()));

组合策略

Failsafe.with(fallback).compose(retryPolicy).compose(circuitBreaker).compose(timeout).get(supplier);

Failsafe.with(fallback, retryPolicy, circuitBreaker, timeout).get(supplier);

同步执行

run方法

Failsafe.with(retryPolicy).run(() -> connect());

get方法

Connection connection = Failsafe.with(retryPolicy).get(() -> connect());

异步执行

runAysnc方法

CompletableFuture<Void> future = Failsafe.with(retryPolicy).runAsync(() -> connect());

getAsync方法

CompletableFuture<Connection> future = Failsafe.with(retryPolicy).getAsync(() -> connect());

事件监听

Failsafe.with(retryPolicy, circuitBreaker).onSuccess(e -> log.info("Connected to {}", e.getResult())).onFailure(e -> log.error("Failed to create connection", e.getException())).get(this::connect);

执行取消

取消同步执行

Call<Connection> call = Failsafe.with(retryPolicy).newCall(this::connect);
scheduler.schedule(() -> call.cancel(false), 10, TimeUnit.SECONDS);
Connection connection = call.execute();

取消异步执行

CompletableFuture<Connection> future = Failsafe.with(retryPolicy).getAsync(this::connect);
future.cancel(shouldInterrupt);

参考

https://failsafe.dev/

java库的使用--Failsafe相关推荐

  1. 2016年度最受欢迎的100个 Java 库

    [编者按]本文作者为 Henn Idan,主要介绍基于 GitHub 中的数据分析,得出的2016年度最受欢迎的100个 Java 库.本文系国内 ITOM 管理平台 OneAPM 编译呈现. 谁拔得 ...

  2. Java黑皮书课后题第10章:**10.23(实现String类)在Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString2)

    **10.23(实现String类)在Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString2) 题目 简短的吐槽 代码:这里将类名改用Test23_MyStrin ...

  3. 2018年不能错过的 14 个 Java 库

    转载自 2018年不能错过的 14 个 Java 库 下面是整理给你的 2018 年不应该错过的 14 个 Java 库包清单,多多少少大家应该都接触过一些,如果还没听过那就OUT了. Guice G ...

  4. 在分析了47,251个依赖关系之后,2016年排名前100的Java库

    谁在上面,谁在后面? 我们分析了Github上的47,251个依赖关系,并抽取了前100个Java库 长周末我们最喜欢的消遣是浏览Github并搜索流行的Java库. 我们决定与您分享乐趣和信息. 我 ...

  5. eclipse 中文_谁说API必须用英文?中文API的Java库可以有!

    是不是看惯了文档里的英文接口(API),也在 IDE 里看惯了自动补全里的英文接口? 现今的绝大多数 API 的确是英文命名没错,但绝非不能或者不应该实现和发布中文 API 的库. 这里用一个简单的汉 ...

  6. 10大最高效的Java库盘点

    1. Java 标准库 不用怀疑,我说的就是Java标准库,很多人都低估了或者没有完全了解Java标准库,并且不知道如何在编程的时候使用它,有些人甚至都不用它,下面说一些Java标准库的简要说明 ●  ...

  7. 好用java库(二) : lambdaj (集合操作)

    接着介绍另外一个好用的java库. 记得之前做过一个web services,业务逻辑是很简单,可是代码写得多又长,因为基本上都是在对ArrayList结果进行各种筛选,排序,聚合等操作.大家都有这样 ...

  8. scala调用java库_从scala调用java时的java.lang.IllegalAccessError – solutions / workarounds?...

    我正在使用 java线性代数库(ojalgo 32.0)进行scala项目,我遇到了一个 奇怪的问题.我使用的每种ojalgo方法都很好(例如矩阵 和逐元素乘法,逆矩阵和随机矩阵 除了用于获得矩阵尺寸 ...

  9. Netflix推出Hollow,处理内存数据集的Java库

    Netflix最近推出了Hollow,一款Java库和工具包,旨在有效缓存不属于"大数据"的数据集.这些数据集可能是电子商务和搜索引擎的元数据,或者是Netflix电影和电视节目的 ...

  10. java 亚马逊 mws_使用Amazon Deep Java库进行Java中的机器学习

    java 亚马逊 mws https://www.deepnetts.com/blog/deep-netts-community-editionInterest in machine learning ...

最新文章

  1. 应用人工智能有助心理学发展
  2. [SQL]死锁处理语句
  3. java add offer_图解Java中的5大队列!(干货收藏)
  4. MySQL 快速入门教程
  5. 操作系统回忆录:进程、线程、资源调度
  6. 线程互斥与同步 在c#中用mutex类实现线程的互斥_Golang 并发编程与同步原语
  7. hibernate 表关系映射详解之多对多
  8. Nginx 过滤模块
  9. dvd在线租赁问题 matlab,DVD在线租赁问题.doc
  10. 天龙源码框架分析_天龙源码分析 - VariableSystem
  11. ASP.NET MVC程序播放H.264视频
  12. ReactHooks——react-countdown倒计时——dayjs结合react-countdown
  13. 制作自己的Maven镜像,上传Harbor镜像仓库
  14. 数组名与数组名前加取地址符
  15. win10计算机磁盘图标,Win10系统硬盘图标怎么更换?Win10系统自定义硬盘图标的方法...
  16. autojs图片加水印
  17. 【商业画布】魏朱画布
  18. 几种查询局域网内在线弱电设备IP地址的方法,总有一款你会用的到
  19. RTD2556/RTD2556T,支持输入HDMI,DP,输出LVDS,EDP,2.5K分辨率
  20. STM32F103ZET6中文数据手册

热门文章

  1. 同步Buck芯片的自举电容原理解析
  2. Win11任务栏不显示时间怎么办?Win11任务栏不显示时间的解决方法
  3. redis命令行查询某个key值
  4. 用C语言短除法求最大公因数用,用短除法求最大公因数
  5. 毕设项目部署到服务器,在云服务器上做毕设
  6. 北京智能机器人为游客指路;日本研发出可识别背影的人工智能
  7. 技术人的未来(一)——跳槽
  8. springboot微信登录
  9. Flutter跑马灯Marquee
  10. TextStyleOpts:文字样式配置项