问题标签 [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.
cloud - 多个云实例上的弹性 4j 断路器
我有一个用例,我在 PCF 上运行单个 Spring Boot 应用程序的多个实例
现在我已经为其中一个调用引入了断路器注释。
问题
当跨实例的调用失败时,resilience4j 会在实例级别而不是服务级别(为 1)上计算故障,并相应地为单个实例打开电路。
需要澄清的问题
- 这是预期的行为吗?
- 有没有办法(财产)让这些柜台达到服务水平?
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] = []
java - Resilience4j:将 Bulkhead 与 TimeLimiter 相结合,以实现来自 Tomcat 的同步外部系统调用
我有一个在 Tomcat 服务器中运行的 Web 应用程序,它执行对外部服务器的调用。现在,我想使用 Resilience4j来限制TimeLimiter
响应的等待时间,另外还想Bulkhead
限制对外部服务器的并行调用量。
我不需要对外部系统的异步调用,因为 Tomcat 线程必须等待响应或超时,无论如何。
在这种情况下结合 theTimeLimiter
和 the的最佳方法是什么?Bulkhead
我需要 aSemaphoreBulkhead
还是 theThreadPoolBulkhead
以及如何将我的外部系统调用包装在 aFuture
所需的a 中TimeLimiter
?
resilience4j - Spring Boot 和 Resilience4j 缓存提供的缓存选项之间的区别
Resilience4j 版本:1.2.0
Java版本:1.8
问题描述:我正在尝试探索resilience4j提供的不同模式。我试图坚持注释与函数式编程。但是当谈到resilience4j cahce时,我有点困惑,因为我找不到相同的工作示例。我能够成功地尝试其他模式。我的困惑在于 Spring Boot 缓存和 Resilience4j 缓存。它们是相同的还是功能不同?我可以互换使用它们吗?是否有任何 github 存储库为弹性 4j 缓存提供用例和解释?任何输入都受到高度赞赏。
kotlin - 为什么弹性 4j-kotlin 指标不起作用?
我正在使用resilience4j-kotlin CircuitBreaker,我想显示指标。
我正在添加此依赖项。io.github.resilience4j:resilience4j-微米
添加此代码。
断路器工作成功,但指标未显示在“../actuator/metrics”上。甚至电路开路。
它在 kotlin-coroutine 上工作吗?
java - Resilience4j RateLimiter 似乎忽略了配置
我对 Resilience4j RateLimiter 有疑问
在ExternalService
我有一些带有 localTime 响应的基本日志记录。我认为它应该像我在评论中解释的那样工作,但我的回应是:
所以看起来第一个循环是好的,但在那之后,RateLimiter 允许五个下一个线程,并且永远不会调用最后一个线程。
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”应用程序但我的控制器建议仍然不起作用.
因此,请为我的上述查询提供最佳解决方案。
execution - 在 Resilience4j 中集成断路器、重试和时间限制器
我正在尝试使用Resilience4j功能。
我的用例是结合 3 个模块:
- 断路器
- 重试
- 限时器
我想组合所有这些模块并只执行一次该方法。
代码
这是我尝试过的。
问题
我的doSomething()
方法执行两次而不是预期的一次。
有没有人之前看到过这个问题?
spring - Spring cloud circuitbreaker:创建断路器方法创建一个新的断路器而不是返回现有的断路器
Spring 的版本Resilience4JCircuitBreaker
是一个包装器,io.github.resilience4j.circuitbreaker.CircuitBreaker
并且还保留了 Circuitbreaker 注册表的一个实例。如果它已经创建,我希望使用已经存在的 CircuitBreaker 实例。如果使用 Spring ,似乎没有办法做到这一点Resilience4JCircuitBreaker
。
例如,如果使用普通的 Resilience4J,我可以做类似的事情
似乎没有办法用 Resilience4JCircuitBreaker 做到这一点?
java - Java9模块错误:无法确定模块名称,未命名模块读取包和模块org.reactivestreams从两者读取包
我收到 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 中排除罐子。但我不明白该怎么做?