问题标签 [resilience4j]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
639 浏览

cloud - 多个云实例上的弹性 4j 断路器

我有一个用例,我在 PCF 上运行单个 Spring Boot 应用程序的多个实例

现在我已经为其中一个调用引入了断路器注释。

问题

当跨实例的调用失败时,resilience4j 会在实例级别而不是服务级别(为 1)上计算故障,并相应地为单个实例打开电路。

需要澄清的问题

  1. 这是预期的行为吗?
  2. 有没有办法(财产)让这些柜台达到服务水平?
0 投票
1 回答
832 浏览

resilience4j - 为什么 Resilience4j 断路器不启动新线程

我正在尝试从 Hystrix 迁移到 Resilience4j 并尝试使用使用复原力4j-spring-boot2 依赖项的注释( https://resilience4j.readme.io/docs/getting-started-3 )配置弹性4j 的选项。

当我使用它进行测试并分析日志时,即使是用 @CircuitBreaker 修饰的方法也在同一个 http-nio 线程中运行:

带有 CircuitBreaker 注释的日志:


2020-01-10 10:31:15,996 [ http-nio-8080-exec-1 ] INFO APP=test-app | 环境=本地 | REQUEST_ID=1 | TRACE_ID=eb88d5c53ab97a40 | SPAN_ID=eb88d5c53ab97a40 | 客户 ID=1 | CLIENT_VERSION=1 | acsimpdependent.DependentApi - 请求:http ://example.api.com/api/customers/John

2020-01-10 10:31:15,997 [ http-nio-8080-exec-1 ] 调试 APP=test-app | 环境=本地 | REQUEST_ID=1 | TRACE_ID=eb88d5c53ab97a40 | SPAN_ID=eb88d5c53ab97a40 | 客户 ID=1 | CLIENT_VERSION=1 | acsimyservice.aop.LogingAspect - 输入:au.com.suncorp.insurance.myservice.config.DependentApiRestOperation.getRestOperations() 参数[s] = []

2020-01-10 10:31:15,999 [ http-nio-8080-exec-1 ] 调试 APP=test-app | 环境=本地 | REQUEST_ID=1 | TRACE_ID=eb88d5c53ab97a40 | SPAN_ID=eb88d5c53ab97a40 | 客户 ID=1 | CLIENT_VERSION=1 | acsimyservice.aop.LoggingAspect - 退出:au.com.suncorp.insurance.myservice.config.DependentApiRestOperation.getRestOperations() 结果 = org.springframework.web.client.RestTemplate@1f3111d1

2020-01-10 10:31:16,065 [ http-nio-8080-exec-1 ] 错误 APP=test-app | 环境=本地 | REQUEST_ID=1 | TRACE_ID=eb88d5c53ab97a40 | SPAN_ID=eb88d5c53ab97a40 | 客户 ID=1 | CLIENT_VERSION=1 | acsimyservice.aop.LoggingAspect


相反,在这种情况下,当我从 CircuitBreakerFactory 创建一个 CircuitBreaker 时,我可以看到新的断路器线程在受断路器保护的方法内部控制时旋转。

CircuitBreakerFactory 的日志:


2020-01-10 10:50:04,178 [ hystrix-HystrixCircuitBreakerFactory-1 ] DEBUG APP=test-app | 环境=本地 | REQUEST_ID= | TRACE_ID=bde6e74d65833730 | SPAN_ID=d5dc68689645201a | 客户 ID= | CLIENT_VERSION= | acsimyservice.aop.LoggingAspect - 输入:au.com.suncorp.insurance.myservice.config.properties.DependentApiProperties.getAddress() 参数[s] = []

2020-01-10 10:50:04,178 [ hystrix-HystrixCircuitBreakerFactory-1 ] DEBUG APP=test-app | 环境=本地 | REQUEST_ID= | TRACE_ID=bde6e74d65833730 | SPAN_ID=d5dc68689645201a | 客户 ID= | CLIENT_VERSION= | acsimyservice.aop.LoggingAspect - 退出:au.com.suncorp.insurance.myservice.config.properties.DependentApiProperties.getAddress() 结果 = au.com.suncorp.insurance.myservice.config.properties.DependentApiProperties$Address@1928e7f3

2020-01-10 10:50:04,179 [ hystrix-HystrixCircuitBreakerFactory-1 ] DEBUG APP=test-app | 环境=本地 | REQUEST_ID= | TRACE_ID=bde6e74d65833730 | SPAN_ID=d5dc68689645201a | 客户 ID= | CLIENT_VERSION= | acsimyservice.aop.LoggingAspect - 输入:au.com.suncorp.insurance.myservice.config.properties.DependentApiProperties.getAddress() 参数[s] = []

2020-01-10 10:50:04,179 [ hystrix-HystrixCircuitBreakerFactory-1 ] DEBUG APP=test-app | 环境=本地 | REQUEST_ID= | TRACE_ID=bde6e74d65833730 | SPAN_ID=d5dc68689645201a | 客户 ID= | CLIENT_VERSION= | acsimyservice.aop.LoggingAspect - 退出:au.com.suncorp.insurance.myservice.config.properties.DependentApiProperties.getAddress() 结果 = au.com.suncorp.insurance.myservice.config.properties.DependentApiProperties$Address@1928e7f3

2020-01-10 10:50:04,184 [ hystrix-HystrixCircuitBreakerFactory-1 ] INFO APP=test-app | 环境=本地 | REQUEST_ID= | TRACE_ID=bde6e74d65833730 | SPAN_ID=d5dc68689645201a | 客户 ID= | CLIENT_VERSION= | acsimpdependent.DependentApi - 请求:http ://example.api.com/api/customers/John

2020-01-10 10:50:04,186 [ hystrix-HystrixCircuitBreakerFactory-1 ] DEBUG APP=test-app | 环境=本地 | REQUEST_ID= | TRACE_ID=bde6e74d65833730 | SPAN_ID=d5dc68689645201a | 客户 ID= | CLIENT_VERSION= | acsimyservice.aop.LoggingAspect - 输入:au.com.suncorp.insurance.myservice.config.DependentApiRestOperation.getRestOperations() 参数[s] = []


0 投票
1 回答
869 浏览

java - Resilience4j:将 Bulkhead 与 TimeLimiter 相结合,以实现来自 Tomcat 的同步外部系统调用

我有一个在 Tomcat 服务器中运行的 Web 应用程序,它执行对外部服务器的调用。现在,我想使用 Resilience4j来限制TimeLimiter响应的等待时间,另外还想Bulkhead限制对外部服务器的并行调用量。

我不需要对外部系统的异步调用,因为 Tomcat 线程必须等待响应或超时,无论如何。

在这种情况下结合 theTimeLimiter和 the的最佳方法是什么?Bulkhead我需要 aSemaphoreBulkhead还是 theThreadPoolBulkhead以及如何将我的外部系统调用包装在 aFuture所需的a 中TimeLimiter

0 投票
1 回答
360 浏览

resilience4j - Spring Boot 和 Resilience4j 缓存提供的缓存选项之间的区别

Resilience4j 版本:1.2.0

Java版本:1.8

问题描述:我正在尝试探索resilience4j提供的不同模式。我试图坚持注释与函数式编程。但是当谈到resilience4j cahce时,我有点困惑,因为我找不到相同的工作示例。我能够成功地尝试其他模式。我的困惑在于 Spring Boot 缓存和 Resilience4j 缓存。它们是相同的还是功能不同?我可以互换使用它们吗?是否有任何 github 存储库为弹性 4j 缓存提供用例和解释?任何输入都受到高度赞赏。

0 投票
0 回答
257 浏览

kotlin - 为什么弹性 4j-kotlin 指标不起作用?

我正在使用resilience4j-kotlin CircuitBreaker,我想显示指标。

我正在添加此依赖项。io.github.resilience4j:resilience4j-微米

添加此代码。

断路器工作成功,但指标未显示在“../actuator/metrics”上。甚至电路开路。

它在 kotlin-coroutine 上工作吗?

0 投票
1 回答
290 浏览

java - Resilience4j RateLimiter 似乎忽略了配置

我对 Resilience4j RateLimiter 有疑问

ExternalService我有一些带有 localTime 响应的基本日志记录。我认为它应该像我在评论中解释的那样工作,但我的回应是:

所以看起来第一个循环是好的,但在那之后,RateLimiter 允许五个下一个线程,并且永远不会调用最后一个线程。

0 投票
0 回答
213 浏览

spring-boot - 使用 Resilience4j 的断路器的控制器建议问题

我在微服务环境中工作,我有 3 个不同的应用程序 A、B 和 C。

我在 Spring Boot 应用程序中使用Resilience4j断路器。我正在使用包含 Controller Advice 的“C”应用程序,并将 .jar 添加到“B”依赖项中,并且“B”应用程序 .jar 也添加到“A”应用程序依赖项中。

我正在生产一个 Resp 服务并向另一个在这里发送请求,我在“C”应用程序中的控制器建议已经添加到“B”应用程序依赖项中,并且相同的“B”应用程序依赖项被添加到“A”应用程序中。

我的请求从“A”应用程序转到“B”应用程序我想在“B”应用程序中处理我自己的异常,但我已经将“C”应用程序的依赖项添加到“B”应用程序但我的控制器建议仍然不起作用.

因此,请为我的上述查询提供最佳解决方案。

0 投票
2 回答
1321 浏览

execution - 在 Resilience4j 中集成断路器、重试和时间限制器

我正在尝试使用Resilience4j功能。

我的用例是结合 3 个模块:

  • 断路器
  • 重试
  • 限时器

我想组合所有这些模块并只执行一次该方法。

代码

这是我尝试过的。

问题

我的doSomething()方法执行两次而不是预期的一次。

有没有人之前看到过这个问题?

0 投票
0 回答
123 浏览

spring - Spring cloud circuitbreaker:创建断路器方法创建一个新的断路器而不是返回现有的断路器

Spring 的版本Resilience4JCircuitBreaker是一个包装器,io.github.resilience4j.circuitbreaker.CircuitBreaker并且还保留了 Circuitbreaker 注册表的一个实例。如果它已经创建,我希望使用已经存在的 CircuitBreaker 实例。如果使用 Spring ,似乎没有办法做到这一点Resilience4JCircuitBreaker

例如,如果使用普通的 Resilience4J,我可以做类似的事情

似乎没有办法用 Resilience4JCircuitBreaker 做到这一点?

0 投票
1 回答
754 浏览

java - Java9模块错误:无法确定模块名称,未命名模块读取包和模块org.reactivestreams从两者读取包

我收到 3 个不同的错误。

  1. 无法确定模块名称..
  2. 未命名的模块读取包..
  3. 模块 org.reactivestreams 从两者中读取包..

这些错误到底是什么?

构建.gradle

错误信息:

任务:编译Java

错误:无法确定 /Users/srihariprasad/.gradle/caches/modules-2/files-2.1/io.github.resilience4j/resilience4j-framework-common/1.3.1/8c16dda86fad3c9251930cad21ac87aa34cd8035/resilience4j-framework-common-1.3 的模块名称.1.jar

错误:未命名的模块从弹性4j.spring.boot.common 和io.github.resilience4j.springboot2 读取包io.github.resilience4j.timelimiter.autoconfigure

错误:未命名的模块从弹性4j.spring.boot.common 和io.github.resilience4j.springboot2 读取包io.github.resilience4j.retry.autoconfigure

错误:未命名的模块从弹性4j.spring.boot.common 和io.github.resilience4j.springboot2 读取包io.github.resilience4j.ratelimiter.autoconfigure 错误:未命名的模块读取包io.github.resilience4j.circuitbreaker.autoconfigure 从弹性4j.spring.boot.common 和io.github.resilience4j.springboot2 错误:未命名的模块从resilience4j.spring.boot.common 和io.github.resilience4j.springboot2 读取包io.github.resilience4j.bulkhead.autoconfigure

错误:模块 org.reactivestreams 从弹性4j.spring.boot.common 和 io.github.resilience4j.springboot2 读取包 io.github.resilience4j.timelimiter.autoconfigure

我们如何才能从哪个jar中找到这两个模块,排除那些。1.resilience4j.spring.boot.common,2.io.github.resilience4j.springboot2。据我了解,我需要从弹性4j-spring-boot2:1.3.1 中排除罐子。但我不明白该怎么做?