====== resilience4j ====== * [[https://github.com/resilience4j/resilience4j|resilience4j]] * Fault tolerance library designed for functional programming * CircuitBreaker, Bulkhead, RateLimiter, Retry, TimeLimiter, Cache 등을 제공해준다. * [[java:bucket4j|Bucket4J]] ===== 동시성 문제로 인해 private fallback method 호출 실패 ===== * resilience4j 는 fallback 메소드를 ''private'' 으로 만들기를 권장하는데, [[https://github.com/resilience4j/resilience4j/blob/master/resilience4j-spring/src/main/java/io/github/resilience4j/fallback/FallbackMethod.java#L198|FallbackMethod.java]] 의 fallback method 호출시점의 동시성 문제로 인해서 private 이 호출이 안되는 문제가 발생할 수 있음. * fallback method 가 동시에 여러번 호출 될 때 첫번째 호출이 ''accessible=true''로 만들어서 실행 * 두번째 호출이 시작되고 accessible 체크가 완료된 직후 시점에 첫번째 호출이 ''accessible=false'' 로 메소드 접근을 막아버림. * 두번째 호출은 private 메소드 호출권한이 없게 되어 오류 발생. * 현재로서는 그냥 무시하거나 **public**으로 fallback 메소드를 만들어야 한다. * [[https://github.com/resilience4j/resilience4j/issues/1770|UndeclaredThrowableException Caused by IllegalAccessException with fallbackMethod · Issue #1770 · resilience4j/resilience4j]] * [[https://github.com/RobWin|UndeclaredThrowableException Caused by IllegalAccessException with fallbackMethod · Issue #1770 · resilience4j/resilience4j]] Caused by: java.lang.IllegalAccessException: Class io.github.resilience4j.fallback.FallbackMethod can not access a member of class com.my.class with modifiers "private" ===== bulkhead ===== * [[https://resilience4j.readme.io/docs/bulkhead|Bulkhead]] ===== 참조 ===== * [[https://javatechonline.com/how-to-implement-fault-tolerance-in-microservices-using-resilience4j/|How To Implement Fault Tolerance In Microservices Using Resilience4j? | Making Java Easy To Learn]]