当前位置: 首页 > 软件库 > 程序开发 > 常用工具包 >

Resilience4j

轻量级的容错组件
授权协议 Apache
开发语言 Java
所属分类 程序开发、 常用工具包
软件类型 开源软件
地区 不详
投 递 者 洪弘亮
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Resilience4j 是一个轻量级的容错组件,其灵感来自于 Hystrix,但主要为 Java 8 和函数式编程所设计。轻量级体现在其只用 Vavr 库(前身是 Javaslang),没有任何外部依赖。而 Hystrix 依赖了 Archaius ,Archaius 本身又依赖很多第三方包,例如 Guava、Apache Commons Configuration 等。

限速组件架构:

Resilience4j 提供了如下几款核心组件

  • resilience4j-circuitbreaker: Circuit breaking

  • resilience4j-ratelimiter: Rate limiting

  • resilience4j-bulkhead: Bulkheading

  • resilience4j-retry: Automatic retrying (sync and async)

  • resilience4j-cache: Response caching

附件组件包括:

  • resilience4j-reactor: Spring Reactor adapter

  • resilience4j-rxjava2: RxJava2 adapter

  • resilience4j-micrometer: Micrometer Metrics exporter

  • resilience4j-metrics: Dropwizard Metrics exporter

  • resilience4j-prometheus: Prometheus Metrics exporter

  • resilience4j-spring-boot: Spring Boot Starter

  • resilience4j-ratpack: Ratpack Starter

  • resilience4j-retrofit: Retrofit Call Adapter Factories

  • resilience4j-vertx: Vertx Future decorator

  • resilience4j-consumer: Circular Buffer Event consumer

使用示例:

使用 Resilience4j 实现请求调用频率限制的示例代码:

// Create a custom RateLimiter configuration
RateLimiterConfig config = RateLimiterConfig.custom()
    .timeoutDuration(Duration.ofMillis(100))
    .limitRefreshPeriod(Duration.ofSeconds(1))
    .limitForPeriod(1)
    .build();
// Create a RateLimiter
RateLimiter rateLimiter = RateLimiter.of("backendName", config);

// Decorate your call to BackendService.doSomething()
Supplier<String> restrictedSupplier = RateLimiter
    .decorateSupplier(rateLimiter, backendService::doSomething);

// First call is successful
Try<String> firstTry = Try.ofSupplier(restrictedSupplier);
assertThat(firstTry.isSuccess()).isTrue();

// Second call fails, because the call was not permitted
Try<String> secondTry = Try.of(restrictedSupplier);
assertThat(secondTry.isFailure()).isTrue();
assertThat(secondTry.getCause()).isInstanceOf(RequestNotPermitted.class);
  • 介绍 Hystrix停更之后,Netflix官方推荐移步至resilience4j,它是一个轻量、易用、可组装的高可用框架,支持熔断、高频控制、隔离、限流、限时、重试等多种高可用机制。   与Hystrix相比,它有以下一些主要的区别: Hystrix调用必须被封装到HystrixCommand里,而resilience4j以装饰器的方式提供对函数式接口、lambda表达式等的嵌套装饰,因此你可以

  • resilience4j使用指南 1.resilience4j maven依赖 当前选用的springcloud版本为3.1.6对应spring-cloud-release为2021.0.6 <!--熔断降级 for spring cloud 3.1.6 @formatter:off--> <dependency> <groupId>org.springframework.cloud</g

  • Resilience4j 是一个轻量级的容错组件,其灵感来自于 Hystrix,但主要为 Java 8 和函数式编程所设计。 轻量级体现在其只用 Vavr 库,没有任何外部依赖。而 Hystrix 依赖了 Archaius,Archaius 本身又依赖很多第三方包,例如 Guava、Apache Commons Configuration 等等。 提示: **Resilience(容错)**包含

  • 官方文档 SpringCloud之Resilience4J用法精讲 SpringCloud之在微服务中使用Resilience4J 熔断器Resilience4j 熔断,限流,降级 熔断和降级的区别 断路器 Resilience4j+Feign Spring重试机制 Spring Retry Demo使用实例和@Retryable注解属性说明 spring-retry 利用 @CircuitBre

  • 特点 支持jdk8函数式编程 轻量级,易于使用的编程API 模块化设计,将每个功能点(如熔断、限速器、自动重试)都拆成了单独的模块,使用时只需要引入相关依赖即可。 使用装饰器模式对任何函数或lamda表达式进行增强。 缺点: 缺乏生产级别的配套设施(如提供规则管理和实时监控能力的控制台) 文档不够详细 与hystrix对比&

  • 1 缘起 因为做微服务,为保证服务的稳定(笼统地讲), 常有,熔断、限流、降级等手段, 在使用限流过程中,之前只是拷贝别人的用法,集成到自己的服务中, 项目复盘时,发现,坏了,我用的这个技术是怎么实现的? 脑子一片空白。真的是做了个寂寞。还是有点慌,于是开始看源码。 ================ 当然,每次阅读源码,我的方法,总是要先找到入口, 从入口开始Debug,深挖实现,限流同样,先找入

  • 前言 需求   为了防止网络抖动问题,需要进行重试处理,重试达到阈值后进行告警通知,做到问题及时响应 技术选型 类型 同步、异步 是否支持声明式调用(注解) 是否支持监控 resilience4j-retry 同步 是 是 Guava Retry 同步 否 否,可通过监听器自行实现监控统计 Spring Retry 同步 是 否,可通过监听器自行实现监控统计 基于以上方案的对比,选择了使用resi

  • 关于使用 resilience4j 实现基于访客 IP 的限流,网上已经有很多文章了,我这里就不再赘述。 本文主要是要解决一个问题:如果访客量很大,会占用太多的内存来存放限流对象。 假设一个系统每天有上百万的访客,而基于 IP 的限流策略会导致 resilience4j 中用来存放每个 IP 对应的限流对象的哈希表巨大无比。 下面是限流的策略: //每分钟最多访问100次 RateLimiterC

  • 1.pom文件 <org.springframework.boot.version>2.2.2.RELEASE</org.springframework.boot.version> <org.springframework.boot.maven.version>2.1.0.RELEASE</org.springframework.boot.maven.version>

  • Maven配置 <!-- resilience4j --> <dependency> <groupId>io.github.resilience4j</groupId> <artifactId>resilience4j-retry</artifactId> <version>1.7.0</ver

 相关资料
  • 问题内容: JPanel和JFrame有什么区别,以及与轻量级,重量级的关系? 问题答案: JPanel是允许将多个UI组件放在一起的容器。JFrame是使用Swing编写的窗口。 所有的Swing组件都是所谓的“轻型”组件,因为它们是用Java编写的。例如,如果您运行Swing应用程序并尝试使用UI分析工具(例如Windows中的WinSpy)对其进行分析,则只会看到一个元素:窗口(JFrame

  • 问题内容: 我知道Swing被认为是轻量级的,因为它是完全用Java实现的,而无需调用本机操作系统来绘制图形用户界面组件。 另一方面,AWT(抽象窗口工具箱)是重量级的工具箱,因为它仅调用操作系统以产生其GUI组件。 但是我听说Swing仍然基于AWT,甚至Swing组件也必须至少有一个重量级的容器。换句话说,JFrame,JApplet不是轻量级的,是真的吗?找出你的原因? 问题答案: JFra

  • 本文向大家介绍vue移动端轻量级的轮播组件实现代码,包括了vue移动端轻量级的轮播组件实现代码的使用技巧和注意事项,需要的朋友参考一下 一个简单的移动端卡片滑动轮播组件,适用于Vue2.x c-swipe 2.0 全新归来。重写了全部的代码,更靠谱的质量,更优秀的性能 English Document 安装 npm install c-swipe --save 使用 注册组件 在 .vue 单文件

  • 主要内容:使用普通函数创建 goroutine,使用匿名函数创建goroutine在编写 Socket 网络程序时,需要提前准备一个线程池为每一个 Socket 的收发包分配一个线程。开发人员需要在线程数量和 CPU 数量间建立一个对应关系,以保证每个任务能及时地被分配到 CPU 上进行处理,同时避免多个任务频繁地在线程间切换执行而损失效率。 虽然,线程池为逻辑编写者提供了线程分配的抽象机制。但是,如果面对随时随地可能发生的并发和线程处理需求,线程池就不是非常直观和方便了。能否

  • Jenkins Pipeline插件有一个称为“轻量级签出”的功能,其中主服务器仅从repo中提取Jenkinsfile,而不是整个repo。配置屏幕中有一个相应的复选框。我想在多分支管道中进行轻量级签出,但我在多分支配置屏幕中没有看到复选框。有什么想法如何实现这一点吗?我注意到一些关闭的问题表明此功能可用,但我无法找到任何有关如何实现它的细节。 相关资料: https://issues.jenk

  • 问题内容: 在解决了另一个愚蠢的日食问题之后,我想尝试获得尽可能轻巧,最小的Eclipse安装。 为了清楚起见,我使用eclipse做两件事: 编辑Java 调试Java 我通过Emacs / Zsh完成的所有其他工作(编辑JSP / XML / JS,文件管理,SVN签入等)。我还没有发现在Eclipse中进行工作以使这些任务高效甚至可靠的任何方面,因此我不希望与之相关的插件。 在eclipse

  • 问题内容: 我有一个将要推送的特定格式的XML文档。该文档将始终是同一类型,因此非常严格。 我需要对此进行解析,以便将其转换为JSON(嗯,这是一个混蛋版本,以便其他人可以将其与DOJO一起使用)。 我的问题是,我应该使用非常快速的轻量级(不需要SAX等)XML解析器(有什么想法吗?)还是编写我自己的,基本上可以转换为StringBuffer并在数组中旋转?基本上,我假设所有HTML解析器都将旋转

  • 问题内容: 编写新的工作流引擎还是使用现有的BPM引擎更好吗:jBPM 5,Activiti 5? 我的应用程序是基于Web的应用程序,性能非常重要。我的疑问是,与编写简单的工作流引擎相比,使用jBPM / Activiti是否会增加性能开销。 如果我采用自我实现,我会错过工作流程的可视化。为了性能,可以进行交易。 问题答案: 这确实取决于您的要求。首先,查看您是否真的需要工作流引擎(此资源或其他