问题标签 [resilience4j-retry]
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.
execution - 在 Resilience4j 中集成断路器、重试和时间限制器
我正在尝试使用Resilience4j功能。
我的用例是结合 3 个模块:
- 断路器
- 重试
- 限时器
我想组合所有这些模块并只执行一次该方法。
代码
这是我尝试过的。
问题
我的doSomething()
方法执行两次而不是预期的一次。
有没有人之前看到过这个问题?
java - 在使用 Spring Boot 达到最大弹性 4j 重试尝试后处理异常
我有一个场景,我想记录每次重试尝试,当最后一次尝试失败(即maxAttempts
达到)时,抛出异常,假设创建了一个数据库条目。
我尝试使用带有 Spring Boot 的 Resilience4j-retry 来实现这一点,因此我使用application.yml
和注释。
回退将异常原因记录到应用程序日志中。
当我调用此方法person()
时,重试会按照maxAttempt
配置进行。我希望我的自定义运行时MyRestException
在每次重试时被捕获并在最后一次(maxAttempt
达到时)抛出,所以我将调用包装在 try-catch 中。
try-catch
不幸的是,当回退遇到并重新抛出立即被 my而不是 Resilience4j-retry 机制捕获的异常时,重试似乎被忽略了。
如何实现maxAttempts
被击中时的行为?有没有办法为这种情况定义一个特定的后备方法?
spring-boot - 使用注解式 Resilience4j 测试 SpringBoot
我在名为“demo”的SpringBoot 应用程序中使用注解式 Resilience4j。通过 RestTemplate 调用外部后端时,我想使用 TimeLimiter 和 Retry 来实现以下目标:
- 将 REST 调用持续时间限制为 5 秒 --> 如果需要更长时间,则失败并显示 TimeoutException
- 重试 TimeoutException --> 最多尝试 2 次
为了查看我的弹性设置的配置是否按设计工作,我编写了一个集成测试。此测试在配置文件“test”下运行,并使用“application-test.yml”进行配置:
- 使用 TestRestTemplate 向我的“SimpleRestEndpointController”发送呼叫
- 控制器调用我的业务服务“CallExternalService”,它有一个带注释的方法“getPersonById”(注释:@TimeLimiter,@Retry)
- 通过这个方法,一个模拟的 RestTemplate 用于在“FANCY_URL”调用外部后端
- 使用 Mockito 对外部后端的 RestTemplate 调用减慢(使用 Thread.sleep)
- 我希望 TimeLimiter 在 5 秒后取消调用,并且 Retry 确保再次尝试 RestTemplate 调用(验证 RestTemplate 是否已被调用两次)
问题: TimeLimiter 和 Retry 已注册,但没有完成它们的工作(TimeLimiter 不限制调用持续时间)。因此 RestTemplate 只被调用一次,提供空的Person
(见代码澄清)。可以克隆链接的示例项目并在运行测试时展示问题。
代码application-test.yml
(也在这里:链接到 application-test.yml):
此测试的代码(也在这里:链接到 IntegrationTest.java):
我的应用程序代码展示了这个问题: https ://github.com/SidekickJohn/demo
我创建了一个“逻辑”的泳道图作为 README.md 的一部分:https ://github.com/SidekickJohn/demo/blob/main/README.md
java - 带有弹簧靴的 Resilience4j
早些时候,我使用 void 方法使用 CircuitBreaker 和 Retry 注释。有效。但 Timelimiter 无法正常工作。
@Timelimiter(name = "example_tl")
@CIRCUITBREAKER(name = "example_cb", fallbackMethod = "sendDataFallBack")
@Retry(name = "example_retry", fallbackMethod = "sendDataFallBack")
公共无效方法数据(JsonObject jsondata)
我读到它只支持反应式方法。
因此,我将方法返回类型更改为 Mono。在此之后,没有任何工作。
公共 Mono..ClientResponse..methodData(JsonObject jsondata)
你能帮帮我吗?(我被困住了)
问候,斯蒂芬
java - Webflux 和 Resilience4j 重试问题
想问一个关于webflux和resilience4j重试的基本问题。我们正在使用 Webflux 和 Resilience4J(不是 Spring Cloud Circuit Breaker)运行 Java SpringBoot。在运行应用程序时出现错误(不知何故完整的堆栈跟踪不适合我):
构建 Retry bean 的代码如下(我们没有使用基于 YAML 的配置):
现在我们使用从上面注入的 bean 调用我们的 Web 客户端的 POST 方法,如下所示:
POM 依赖:
请帮忙 。
java - 弹性4j springboot 2注释(@Retry,@CircuitBreaker)不起作用
我正在开发一个 springboot 应用程序,并想添加弹性 4j-重试机制。我做了以下步骤:
在 pom.xml 中添加了执行器、aop 和弹性4j 依赖项
在控制器中创建了一个方法,该方法将尝试命中一个虚拟服务(预计会失败)。在我的方法上添加了 @Retry 注释。
将配置添加到 application.properties
弹性4j.retry.instances.sample-api.maxAttempts=5
另外,我尝试使用 maxRetryAttempts。但没有任何改变。
我希望它重试在 application.properties 中配置的次数。但是,它只尝试一次。不确定我是否遗漏了什么。有人可以帮忙吗?
spring-boot - Resilience4j + Spring boot @Retry 不能使用异步方法
我有一个@Async
尝试添加的方法,@Retry
但是在发生异常时永远不会执行回退方法。我也试图测试这个抛出异常的模拟,但由于它永远不会进入回退方法,它永远不会成功。
这是我的代码:
测试:
我错过了什么吗?
谢谢!
spring - Springboot中如何根据HTTP响应码进行重试
在这种方法中,只有当我得到某些响应代码时,我才需要重试发布数据。我搜索了一些不适合我的解决方案的选项。使用注释有没有更简单的方法?
aop - Resiliency4j CircuitBreaker 尝试在 AOP 中调用断路器逻辑,以实现在配置中禁用时不调用断路器
有条件地我想通过设置来关闭/打开断路器开关spring.cloud.circuitbreaker.resilience4j.enabled=false
。我的逻辑应该不受断路器逻辑的影响。
spring.cloud.circuitbreaker.resilience4j.enabled=true
我尝试使用下面的演示示例来扩展我的要求,我试图根据inapplication.property
和case中true
的断路器标志绑定目标方法上的断路器调用。false
可能有一种更简单的方法来实现这一点,如果有任何其他解决方案而不是我尝试的解决方案,请帮助我。
示例: spring cloud circuit-breaker-resilency4j 示例
尝试调用快乐路径 - 没有异常时工作正常[响应在 3 秒内出现,因为时间限制器在 bean 创建中设置为 3 秒]
应用程序属性:
控制器:
模拟服务:
配置类:
ApplyCircuitBreaker - 自定义注释仅适用于所需方法:
AOP:CircuitBreakerAroundAspect:
我的要求:
circuitBreakerFactory.create(joinPoint.getSignature().toString()) .run(() -> ....)
在这一行,当目标方法抛出异常时,controll应该去回退机制调用。由于 joinPoint.proceed() 抛出异常,它强制处理异常 - 所以我在这里做错了,需要建议来解决这个问题以解决要求。
错误日志:
java - Resilience4j 使用 CompletionStage 重试
我正在使用这种方法,希望 executeCall 在引发异常时至少重试 3 次。executeCall(request) 方法返回一个 CompletionStage。
当我尝试对这段代码进行单元测试时,executeCall(request) 方法的调用次数只有一次(我在这个方法中抛出了一个异常)。
如何确保它至少重试 5 次(这是默认值)