resilience4j-spring-boot2-demo github
demo下载后,直接运行WebApplication.java即可
demo演示resilience4j核心组件如何与spring-boot2结合使用,几个核心组件原理原理会在后续章节探讨。
resilience4j
resilience4j 是一个轻量级的容错组件,其灵感来自于 Hystrix,但主要为 Java 8 和函 数式编程所设计。轻量级体现在其只用 Vavr 库(前身是 Javaslang),没有任何外部依 赖。而 Hystrix 依赖了 Archaius ,Archaius 本身又依赖很多第三方包,例如 Guava、 Apache Commons Configuration 等。
同类功能对比
核心功能
Core modules:
resilience4j-circuitbreaker: Circuit breaking (熔断器)
resilience4j-ratelimiter: Rate limiting (限流器)
resilience4j-bulkhead: Bulkheading (隔离器)
resilience4j-retry: Automatic retrying (sync and async)(重试、同步&异步)
resilience4j-cache: Response caching (缓存)
resilience4j-timelimiter: Timeout handling (超时处理)
CircuitBreaker 核心配置
/*CircuitBreakerConfiguration支持以下所有配置*/
Duration waitDurationInOpenState;// CircuitBreaker在切换到半开之前应保持打开的等待时间,通俗可理解成熔断开启后,熔断由开启切换到半开的等待时长,Default value is 60 seconds
Integer failureRateThreshold;//故障率阈值百分比,超过该阈值,CircuitBreaker应该跳闸并开始short-circuiting calls,阈值必须大于0且不大于100, Default value is 50 percentage
Integer ringBufferSizeInClosedState;//当CircuitBreaker关闭时,环形缓冲区的大小, 若设置10,则调用9次失败都不会触发熔断, 最小为1, Default size is 100
Integer ringBufferSizeInHalfOpenState;//当CircuitBreaker半开时,环形缓冲区的大小, 若设置10,则调用9次失败都不会触发熔断, 最小为1, Default size is 10
Class<Predicate<Throwable>> recordFailurePredicate;//通过Predicate判断异常是否应该被记为失败调用且增加失败率,默认all exception
Class<? extends Throwable>[] recordExceptions;//配置异常列表,出现列表中异常被记为失败调用且增加失败率
Class<? extends Throwable>[] ignoreExceptions;//配置可忽略异常列表,出现列表中异常不会被记为失败调用且不增加失败率
Boolean automaticTransitionFromOpenToHalfOpenEnabled;//当过了waitDurationInOpenState时长,支持熔断器由OPEN换到HALF_OPEN状态
/*CircuitBreakerConfig支持以上所有配置,下面两个不支持*/
Integer eventConsumerBufferSize;//CircularEventConsumer 消费CircuitBreakerEvent Default size is 100
Boolean registerHealthIndicator;//开启健康检查
demo url介绍
http://localhost:8080/actuator 查看所有监控url
http://localhost:8080/actuator/circuitbreakers 查询所有熔断器
http://localhost:8080/actuator/circuitbreakerevents 查询最近100(默认)未被消费的熔断事件
http://localhost:8080/actuator/circuitbreakerevents/{name} 根据熔断器名称查询熔断事件
http://localhost:8080/actuator/circuitbreakerevents/{name}/{eventType} 根据熔断器名称及事件类型查询熔断事件