首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >resilience4j弹簧启动2

resilience4j弹簧启动2
EN

Stack Overflow用户
提问于 2020-05-07 14:17:01
回答 1查看 908关注 0票数 1

尝试一个简单的Spring 2 + Resilience4j项目。

但面临的问题是,断路器总是关闭,,尽管主机应用程序是关闭的。

服务类

代码语言:javascript
复制
@Autowired
private RestTemplate restTemplate;

@Bean
public RestTemplate restTemplate() {
    return new RestTemplate();
}

@CircuitBreaker(name = "mainService", fallbackMethod="testFallBack")
public ResponseEntity<String> invokeService(int i) {
    return restTemplate.exchange(
            "http://localhost:9092/", // This service is always down
            HttpMethod.GET,
            null,
            String.class
    );
}

private  ResponseEntity<String> testFallBack(int i, Exception e) {
    return new ResponseEntity<String>("In fallback method", HttpStatus.INTERNAL_SERVER_ERROR);
}

Resilience4J Config

代码语言:javascript
复制
management.endpoint.health.show-details: always
management.health.circuitbreakers.enabled: true

resilience4j:
  circuitbreaker:
    configs:
      default:
        registerHealthIndicator: true
        minimumNumberOfCalls: 5
        permittedNumberOfCallsInHalfOpenState: 3
        automaticTransitionFromOpenToHalfOpenEnabled: true
        waitDurationInOpenState: 5s
        failureRateThreshold: 50
        eventConsumerBufferSize: 10
    instances:
      mainService:
        baseConfig: default

该服务正在从控制器被多次调用,我期望它在至少5次呼叫后被回退,但是断路器总是关闭,对于来自控制器的每一个呼叫,主机服务都被呼叫,并且连接被拒绝。

依赖项:spring-boot-starter web,弹性4j-spring-boot2,spring,spring starter

早些时候,我尝试了使用CircuitBreakerRegistry和Decorator函数的编程方法,它的工作原理与预期一样。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-09 20:05:30

实际上,你误解了断路器的参数。见文档

minimumNumberOfCalls,默认值: 100 配置CircuitBreaker计算错误率或慢调用率之前所需的最小调用数(每个滑动窗口周期)。 例如,如果minimumNumberOfCalls为10,则必须记录至少10个呼叫,然后才能计算故障率。如果只记录了9个呼叫,即使所有9个呼叫都失败,CircuitBreaker也不会切换到打开。 slidingWindowSize,默认值: 100 配置滑动窗口的大小,该窗口用于记录CircuitBreaker关闭时调用的结果。

在您的配置中,

代码语言:javascript
复制
minimumNumberOfCalls: 5
slidingWindowSize: 100  ## implicitly, because you have not set this parameters

而你

至少在5次呼叫后,它会掉队。

但是,您的断路器在100故障后打开,而不是在5之后打开。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61660096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档