首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Resilience4J CircuitBreaker中的配置不工作

Resilience4J CircuitBreaker中的配置不工作
EN

Stack Overflow用户
提问于 2021-02-24 11:29:36
回答 1查看 2.8K关注 0票数 0

我使用的是Resilience4J的断路器,我需要忽略一些自定义的异常,所以我需要更改默认配置。我使用的是微服务,所以我有一个连接到数据库的微服务,该数据库有一些基本的请求,比如get,还有一个使用这些请求的边缘服务。例如,我需要,如果id不存在,微服务会抛出一个自定义异常,而在这种情况下,断路器不会打开。

使用数据库的微服务:

  • Get request

代码语言:javascript
复制
@GetMapping("/sales-rep/{id}")
@ResponseStatus(HttpStatus.OK)
public SalesRepDTO getSalesRep(@PathVariable Integer id) {
    return salesRepService.getSalesRep(id);
}

  • 服务

public SalesRepDTO getSalesRep(整数id) {

如果(salesRepRepository.existsById(Id)){ SalesRep salesRep = salesRepRepository.findById(id).get();返回新SalesRepDTO(salesRep.getId(),salesRep.getName());

}

边缘服务:

  • Service

代码语言:javascript
复制
    import com.ironhack.manageAllservice.client.AccountClient;
    import com.ironhack.manageAllservice.client.LeadClient;
    import com.ironhack.manageAllservice.client.SalesRepClient;
    import com.ironhack.manageAllservice.controller.dtos.*;
    import com.ironhack.manageAllservice.controller.dtos.report.OpportunityBySalesRepDTO;
    import com.ironhack.manageAllservice.controller.dtos.report.ReportDTO;
    import com.ironhack.manageAllservice.service.exceptions.SalesRepNotFoundException;
    import com.ironhack.manageAllservice.controller.dtos.report.*;
    import com.ironhack.manageAllservice.service.interfaces.IManageAllService;
    import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig;
    import io.github.resilience4j.timelimiter.TimeLimiterConfig;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.cloud.circuitbreaker.resilience4j.Resilience4JCircuitBreakerFactory;
    import org.springframework.cloud.circuitbreaker.resilience4j.Resilience4JConfigBuilder;
    import org.springframework.cloud.client.circuitbreaker.CircuitBreaker;
    import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory;
    import org.springframework.cloud.client.circuitbreaker.Customizer;
    import org.springframework.context.annotation.Bean;
    import org.springframework.http.HttpStatus;
    import org.springframework.stereotype.Service;
    import org.springframework.web.server.ResponseStatusException;

    import java.time.Duration;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    
    @Service
    public class ManageAllService implements IManageAllService {


    @Autowired
    private CircuitBreakerFactory circuitBreakerFactory;

    @Bean
    public Customizer<Resilience4JCircuitBreakerFactory> globalCustomConfiguration() {

        CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
                .failureRateThreshold(50)
                .waitDurationInOpenState(Duration.ofMillis(1000))
                .slidingWindowSize(2)
                .ignoreExceptions(SalesRepNotFoundException.class)
                .build();
        TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig.custom()
                .timeoutDuration(Duration.ofSeconds(4))
                .build();

        return factory -> factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
                .circuitBreakerConfig(circuitBreakerConfig)
                .timeLimiterConfig(timeLimiterConfig)
                .build());
    }

    public SalesRepDTO getSalesRepById(Integer id) {

        CircuitBreaker circuitBreaker = circuitBreakerFactory.create("salesRep-service");

        SalesRepDTO salesRepDTO = circuitBreaker.run(()->salesRepClient.getSalesRep(id),
                throwable -> postSalesRepFallBack());
        return salesRepDTO;
    }

SalesRepNotFoundException.class是我想忽略的例外,但是断路器并没有改变配置。有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2021-03-09 07:13:42

我建议您看看我们的Spring 2初学者:https://resilience4j.readme.io/docs/getting-started-3

我们的Spring允许您将配置解压缩到配置文件中并使用注释。

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

https://stackoverflow.com/questions/66349994

复制
相关文章

相似问题

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