问题标签 [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 投票
2 回答
3315 浏览

spring - 引起:java.lang.ClassNotFoundException:io.github.resilience4j.circuitbreaker.CircuitBreakerOpenException

我正在关注一些关于微服务的书,我现在正在阅读关于弹性 4j 的章节,但是当我运行 maven build 或 test 时,我总是得到:

关于它的谷歌并不多,每个主题都指向缺少以下依赖:

但是我在我的 pom.xml 中得到了它,pom.xml 具有与书中相同的依赖关系。这是完整的 pom.xml:

我还附加了堆栈跟踪:

编辑

正如所建议的那样,我还添加了:

但问题仍然存在。

0 投票
1 回答
1191 浏览

spring - 如何将弹性 4j 重试添加到 spring boot 2 webclient 调用?

我正在尝试使用不工作的resilience4j重试将重试机制添加到webclient rest调用。如果出现异常,该方法只会被调用一次。我正在使用带有 kotlin 的 spring boot 2。

这是来电者

这是配置

这是我的方法:

如果我从方法中抛出硬编码异常,重试工作正常

此外,它适用于 restTemplate

0 投票
0 回答
709 浏览

kotlin - 使用 Resilience4j 和 WebClient 的正确方法

我正在编写一个断路器包装器,它应该封装 http 调用(使用 Spring WebClient )。所有的集成服务都将调用 invokeService() 方法,该方法又调用 excecute()。

现在,如果 execute() 成功了,那很好。如果不是,断路器应在 n 次故障后触发(基于配置)。这就是我所做的。不确定这是否可行(因为 Mono)以及正确的方法。

这就是 execute() 的样子:

0 投票
0 回答
236 浏览

spring-boot - 在resilience4j中重试+断路器

我尝试仅使用断路器重试,即使那样它也不起作用。你能告诉我们如何将它们(重试+断路器)链接在一起。它优先考虑断路器 I am using like this : @CircuitBreaker(name = "backendA", fallbackMethod = "circuitBreakerFallback") @Retry(name = "backendA", fallbackMethod = "retryFallback")

我也在 yml 文件中添加了这段代码

弹性4j.retry.retry-aspect-order=1

仍然没有工作...

我正在使用 Resilience4J 0.17.0 版本

0 投票
1 回答
2318 浏览

java - 弹性4j - 请求超时

我有一个使用 Hystrix 断路器模式的服务,它调用 3rd 方服务。在...的帮助下

@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000") 我已经为第 3 方服务定义了超时。

由于 Hystrix 处于维护模式,我正在从 Hystrix 迁移到 Resilience4j 断路器模式。如何在 resiience4j 中实现类似的超时处理。

我知道可以通过使用@TimeLimiter它是resilience4j-timelimiter的一部分来实现类似的事情。但是根据这个问题:https ://github.com/resilience4j/resilience4j/issues/849 ,我必须将我的方法的返回类型修改为CompletableFuture. 它将涉及对我现有服务的大量代码更改。我如何使用resilience4j 实现这一目标?

0 投票
1 回答
837 浏览

spring-boot - 弹性4j注释不适用于chlid类

我正在将弹性 4j 与 SpringBoot 一起使用。我看到resilience4j 注释只有在它们被放置在抛出异常的类中时才起作用。如果该类由另一个类扩展并且父类具有注释,则重试不起作用。

Resilience4j 配置

家长班

儿童班

这是预期的行为吗?如果我遗漏了什么,你能告诉我吗

0 投票
2 回答
1207 浏览

java - Resilience4J 断路器配置无法正常工作

我正在尝试Circuitbreaker使用自定义构建 Resilience4JCircuitbreakerConfig

使用以下代码构建CircuitbreakerConfig

我正在使用它来进行 HTTP 调用。响应总是需要超过 1000 毫秒。理想情况下,如果前 100 个调用很慢,如果 50 个,CircuitBreaker 应该转换到 OPEN 状态。但它仅在 100 次调用后才转换为 OPEN 状态。

无法理解这种行为。寻求帮助。

0 投票
1 回答
184 浏览

spring-boot - 以编程方式创建断路器时缺少指标

我想用编程方法定义一个断路,所以我做了:

问题是,即使它工作正常,我在指标中得到以下信息:

同时,如果我在属性文件中定义它:

我能看到它。问题可能是什么?我正在使用弹性4j-spring-boot2 依赖项。

0 投票
1 回答
2863 浏览

java - Resilience4j.retry 异常不工作

我正在使用弹性4j.retry弹性4j .断路器。Service1正在调用另一个Service2可能引发异常的服务。即使我遇到异常,我也应该尝试连接至少定义的次数waitDuration * maxRetryAttempts

服务 1 ---> 调用 ---> 服务 2

应用程序.yml

Service1Repository.java

但是,当Service2它关闭时,它不会重试(最多 4 次,每次应该在 1000 毫秒后发生)我会null立即得到响应(在我的情况下)。我尝试增加值(10000ms),还是一样。我看到打印了日志,但服务应该等待waitDuration * maxRetryAttempts是否Serviece2关闭。

0 投票
0 回答
1217 浏览

spring-boot - Resilience4j 隔板 线程行为

我正在使用 Resilience4j 进行大量测试并监控线程的行为。

我正在使用 spring-boot 2.2.5,resilience4j 1.4.0。Gatling(加载工具),visualvm(分析线程)

我意识到:

  1. 当我使用隔板类型 = SEMAPHORE.

    我意识到异步执行将使用默认的 ExecutorService,在这种情况下,ForkJoinPool 和此配置将起作用:

    如果您使用的是bulkhead type = THREADPOOL,上述配置将被忽略。

  2. 当我使用散装的 THREADPOOL 时,这些配置将起作用:

    这些配置将被忽略:

    /li>

我的代码:

配置:

SlowService 对另一个应用程序进行慢速网络调用

我配置这些值只是为了测试,在生产中这些值会有所不同。

问题是:

1 - 我的应用程序是 I/O Bound,我希望当有很多请求(40/s)时,resilience4j 创建的线程池达到 maxThreadPoolSize 数量,但只创建了 3 个线程(cpu 核心数量 -1)我看到了仅创建:

隔板-MyService-1、隔板-MyService-2、隔板-MyService-3

问题是什么?

2 - 我做了这个配置:

我将 slowService 配置为 10 秒,太慢了。

我一次做了 3 个请求,系统的行为是这样的:

  • 一次只处理1个,没关系,因为core和maxThread都是1。
  • 请求被查询了,没问题,因为queueCapacity是2。

但是,我希望在队列中等待的请求只等待 3ms,因为是配置的时间。

如何限制线程在队列中等待的最长时间?

[编辑][更新] 我做了更多的测试并意识到:

当一个线程忙时,如果所有 coreThread 都忙,另一个到达的请求将启动一个新任务,直到到达 coreThread。

如果池到达 coreThread,每个新请求都会被放入队列,队列满后,新请求会创建新线程,直到达到 maxPoolThread。

关于 keepAliveDuration,线程将在空闲一段时间后终止。coreThreadSize 将处于空闲状态,只会终止多余的线程。

我所有的疑问都通过我的测试得到了解答。

现在我只想知道 THREADPOOL 和 SEMAPHORE 之间的不同行为?