当前位置: 首页 > 知识库问答 >
问题:

resilience4J+Spring Boot 2.x

空佐
2023-03-14

我在reative API spring boot应用程序中使用resilience4j进行容错。我可以看到所有事件都被视为成功,即使Mono返回错误。

服务层

    @Override
    @CircuitBreaker(name = "member-service")
    public Mono<String> getMemberInfo(String memberId) {
        return wsClient.getMemberInfo(memberId); 
       // This call will return WSException whenever there is 4XX or 5XX error
    }

application.yml配置

resilience4j.circuitbreaker:
  backends:
    member-service:
      ringBufferSizeInClosedState: 1
      ringBufferSizeInHalfOpenState: 2
      waitInterval: 10000
      failureRateThreshold: 75
      registerHealthIndicator: true
      recordExceptions:
        - com.xx.WSException
      ignoreExceptions:
        - com.xxx.WSClientException

http://localhost:8088/circuitbreaker-events/member-service

{
"circuitBreakerEvents": [
{
"circuitBreakerName": "member-service",
"type": "SUCCESS",
"creationTime": "2019-02-18T21:56:21.588+05:30[Asia/Calcutta]",
"durationInMs": 6
},
{
"circuitBreakerName": "member-service",
"type": "SUCCESS",
"creationTime": "2019-02-18T21:56:21.588+05:30[Asia/Calcutta]",
"durationInMs": 5
},
{
"circuitBreakerName": "member-service",
"type": "SUCCESS",
"creationTime": "2019-02-18T21:56:21.588+05:30[Asia/Calcutta]",
"durationInMs": 6
}
}

共有1个答案

焦宏硕
2023-03-14

您的方法总是返回单声道。即使有错误。和@circuitbreaker注释对异常(不是errormono)做出反应。

因此,您应该将CircuitBreakerOperator应用于响应代码。

public class MemberService {
    private final WsClient wsClient;
    private final CircuitBreaker circuitBreaker;

    public MemberService(WsClient wsClient,
                         CircuitBreakerRegistry circuitBreakerRegistry,
                         CircuitBreakerProperties circuitBreakerProperties) {
        this.wsClient = wsClient;
        this.circuitBreaker = circuitBreakerRegistry.circuitBreaker(
                "member-service",
                () -> circuitBreakerProperties
                        .createCircuitBreakerConfig("member-service"));
    }

    public Mono<String> getMemberInfo(String memberId) {
        return wsClient.getMemberInfo(memberId)
                .transform(CircuitBreakerOperator.of(circuitBreaker));
    }
}

您需要Resilience4j-reactorResilience4j-spring-boot2依赖项。

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

  • 我正在尝试使用 https://github.com/spring-projects/spring-security-oauth2-boot 使用本教程:https://docs.spring.io/spring-security-oauth2-boot/docs/current-SNAPSHOT/reference/htmlsingle/ SpringBoot应用程序 服务器初始化器 用户详细信

  • 我试图通过使用Resilience4j库在微服务中集成容错功能。 我有: build.gradle: application.yml文件: Rest控制器: 有两个endpoint:foo&bar “foo”映射器用断路器注释包装,它最终在N次失败后打开电路 “bar”映射器调用另一个带有某些业务逻辑的方法,并调用一个用断路器注释包装的方法。在这种情况下,我无法达到打开状态来根据业务规则正确处理这

  • 本文向大家介绍SpringBoot2.X Devtools热部署实现解析,包括了SpringBoot2.X Devtools热部署实现解析的使用技巧和注意事项,需要的朋友参考一下 pom文件引入所需jar包 springboot版本采用2.3.1 启动设置成热部署 修改代码后点击刷新即可 控制台重新打印SpringBoot图标就可以了 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多

  • 我在我的SpringBoot应用程序“demo”中使用了注释样式的Resilience4j。当通过RestTemplate调用外部后端时,我希望使用TimeLimiter并重试以实现以下目标: 将REST调用持续时间限制在5秒-->如果需要更长时间,则使用TimeoutException失败 在TimeoutException上重试-->最多尝试2次 为了查看弹性设置的配置是否如设计的那样工作,我

  • pom.xml============== 主类==================== 如果有人看到过类似的问题,请帮忙!