首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重试配置的Resiliency4j断路器不工作

重试配置的Resiliency4j断路器不工作
EN

Stack Overflow用户
提问于 2022-03-13 14:54:19
回答 1查看 1.3K关注 0票数 1

我在服务方法上同时使用@CircuitBreaker@Retry注释。当我应用这两种配置时,重试配置不会生效。

以下是配置:

代码语言:javascript
复制
resilience4j:
  circuitbreaker:
    instances:
      inventorymicroservice:
        registerHealthIndicator: true
        ringBufferSizeInClosedState: 5
        ringBufferSizeInHalfOpenState: 3
        waitDurationInOpenState: 30000
        failureRateThreshold: 50
        slowCallRateThreshold: 50
        recordExceptions:
          - java.io.IOException
          - java.util.concurrent.TimeoutException
          - java.net.ConnectException
          - org.springframework.web.reactive.function.client.WebClientRequestException
  retry:
    instances:
      retryConfig:
        maxAttempts: 3
        waitDuration: 10s
        enableExponentialBackoff: true
        exponentialBackoffMultiplier: 2
        retryExceptions:
          - org.springframework.web.client.HttpServerErrorException
          - java.io.IOException
          - java.io.IOException
          - java.util.concurrent.TimeoutException
          - java.net.ConnectException
          - org.springframework.web.reactive.function.client.WebClientRequestException

服务方法:

代码语言:javascript
复制
   @CircuitBreaker(name = "inventorymicroservice", fallbackMethod = "fallBack")
    @Retry(name = "retryConfig", fallbackMethod = "fallBack")
    public Order saveOrder(Order order){
        Order savedOrder = this.orderRepository.save(order);
        log.info("Calling the inventory service to update the quantity :: ");
        //ResponseEntity<Integer> integerResponseEntity = this.restTemplate.postForEntity("http://localhost:9222/api/inventory", null, Integer.class);
        Integer response = this.webClient
                .post()
                .uri("/api/inventory")
                .retrieve()
                .bodyToMono(Integer.class)
                .block();
        log.info("Response from the inventory microservice :: {}", response);
        return savedOrder;
    }

    private Order fallBack(Throwable exception){
        log.error("Exception while invoking the REST endpoint :: ", exception.getMessage());
        return Order.builder().build();
    }

我哪里出问题了?此外,如何使用函数编程将此配置转换为编程配置。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-13 18:19:25

默认的Resilience4j体序

代码语言:javascript
复制
Retry( CircuitBreaker( RateLimiter( TimeLimiter( Bulkhead( function)))))

您的CircuitBreaker有一个退路,所以它不会抛出异常,所以retry不会看到失败的调用来重试。

移除重试回退,并更改方面顺序,以便CircuitBreaker在重试后完成其工作。

代码语言:javascript
复制
resilience4j:
  circuitbreaker:
    circuitBreakerAspectOrder: 1
  retry:
    retryAspectOrder: 2
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71457925

复制
相关文章

相似问题

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