application.yml 6.65 KB

# 端口
server:
  port: 9080
# 应用名
spring:
  application:
    name: spring-boot-resilience4j-demo

# 监控信息配置
management:
  endpoints:
    web:
      exposure:
        include: '*'
    health:
      show-details: always
      diskspace:
        enabled: false
      circuitbreakers:
        enabled: true
      ratelimiters:
        enabled: false
  metrics:
    tags:
      application: ${spring.application.name}
    distribution:
      percentiles-histogram:
        http:
          server:
            requests: true
        resilience4j:
          circuitbreaker:
            calls: true

# resillience4j 舱壁配置
resilience4j.bulkhead:
  configs:
    base:
      # 最大并发调用数量
      maxConcurrentCalls: 2
      # 线程尝试进入舱壁的最大等待时间(单位:毫秒)
      maxWaitDuration: 10000
      #
      writableStackTraceEnabled: true
      # 时间消费者缓冲区
      eventConsumerBufferSize: 10
  instances:
    bulkheadInstance:
      # 指定使用 base 配置
      baseConfig: base

# resillience4j 熔断器配置
resilience4j.circuitbreaker:
  configs:
    basecount:
      # 滑动窗口类型:COUNT_BASED(基于计数),TIME_BASED(基于时间)
      slidingWindowType: COUNT_BASED
      # 窗口大小(滑动窗口类型是COUNT_BASED,单位为个;滑动窗口类型是TIME_BASED,单位为秒)
      slidingWindowSize: 10
      # 失败率百分比权重(50%),大于等于此值则熔断器打开
      failureRateThreshold: 50
      # 慢调用百分比(认为所有调用时间超过 slowCallDurationThreshold的都是慢调用),大于等于此值则熔断器打开
      slowCallRateThreshold: 50
      # 调用持续多长时间被认定为慢调用,并增加慢调用比例
      slowCallDurationThreshold: 1100
      # 熔断器状态为半打开时,允许的调用数量
      permittedNumberOfCallsInHalfOpenState: 2
      # 半打开状态等待的最大持续时间(0代表无限等待直到允许的调用都完成)
      #maxWaitDurationInHalfOpenState: 0
      # 计算失败率或慢调用前,要求的最小调用数量
      minimumNumberOfCalls: 2
      # 熔断器状态由 OPEN 到 HALF_OPEN 等待的时间
      waitDurationInOpenState: 60000
      # 熔断器状态是否自动从 OPEN 转到 HALF_OPEN。true:自动(会使用1个线程去自动切换状态);false:当有新的调用进来时再进行转换
      automaticTransitionFromOpenToHalfOpenEnabled: false
      recordExceptions:
        - java.lang.Exception
      ignoreExceptions:
        - com.seektruth.demo.spring.boot.resilience4j.exception.ResultException

      # 定制化 Predicate 用于判断此异常是否为失败调用。
      #recordFailurePredicate:  org.spring.boot.resilience4j.exception.RecordFailurePredicate
      # 定制化 Predicate 用于判断此异常是否被忽略。
      #ignoreExceptionPredicate:
    basetime:
      # 滑动窗口类型:COUNT_BASED(基于计数),TIME_BASED(基于时间)
      slidingWindowType: TIME_BASED
      # 窗口大小(滑动窗口类型是COUNT_BASED,单位为个;滑动窗口类型是TIME_BASED,单位为秒)
      slidingWindowSize: 10
      # 失败率百分比权重(50%),大于等于此值则熔断器打开
      failureRateThreshold: 50
      # 慢调用百分比(认为所有调用时间超过 slowCallDurationThreshold的都是慢调用),大于等于此值则熔断器打开
      slowCallRateThreshold: 50
      # 调用持续多长时间被认定为慢调用,并增加慢调用比例
      slowCallDurationThreshold: 1100
      # 熔断器状态为半打开时,允许的调用数量
      permittedNumberOfCallsInHalfOpenState: 2
      # 半打开状态等待的最大持续时间(0代表无限等待直到允许的调用都完成)
      #maxWaitDurationInHalfOpenState: 0
      # 计算失败率或慢调用前,要求的最小调用数量
      minimumNumberOfCalls: 2
      # 熔断器状态由 OPEN 到 HALF_OPEN 等待的时间
      waitDurationInOpenState: 60000
      # 熔断器状态是否自动从 OPEN 转到 HALF_OPEN。true:自动(会使用1个线程去自动切换状态);false:当有新的调用进来时再进行转换
      automaticTransitionFromOpenToHalfOpenEnabled: false
      recordExceptions:
        - java.lang.Exception
      ignoreExceptions:
        - com.seektruth.demo.spring.boot.resilience4j.exception.ResultException
      # 定制化 Predicate 用于判断此异常是否为失败调用。
      #recordFailurePredicate:  org.spring.boot.resilience4j.exception.RecordFailurePredicate
      # 定制化 Predicate 用于判断此异常是否被忽略。
      #ignoreExceptionPredicate:
  instances:
    circuitbreakerCountBased:
      baseConfig: basecount
    circuitbreakerTimeBased:
      baseConfig: basetime

# resilience4j RateLimiter
resilience4j.ratelimiter:
  configs:
    base:
      # 在一个limit刷新周期内,可用的许可数量
      limitForPeriod: 50
      # limit 刷新的周期(单位:纳秒)
      limitRefreshPeriod: 500
      # 线程等待许可的等待时间(单位:秒)
      timeoutDuration: 2
#      subscribeForEvents:
#      allowHealthIndicatorToFail:
#      registerHealthIndicator:
#      eventConsumerBufferSize:
#      writableStackTraceEnabled:
  instances:
    ratelimiterInstance:
      baseConfig: base

# resilience4j Retry
resilience4j.retry:
  configs:
    base:
      # 等待下次重试时间
      waitDuration:
      # 根据尝试次数和结果或异常修改失败后的等待间隔的函数。
#      intervalBiFunction:
      # 最大重试次数
      maxAttempts: 2
      # 断言异常是否需要重试
#      retryExceptionPredicate:
      # 断言返回的结果是否需要重试
#      resultPredicate:
      # 需要重试的 异常列表
      retryExceptions:
        - java.lang.Exception
      # 忽略重试的 异常列表
      ignoreExceptions:
        - java.lang.Exception
      # 重试事件缓冲区大小
      eventConsumerBufferSize: 10
      # 开启指数回退策略
      enableExponentialBackoff: false
      # 指数回退的乘数
#      exponentialBackoffMultiplier:
      # 指数回退最大间隔
#      exponentialMaxWaitDuration:
      # 开启或关闭随机延迟策略
      enableRandomizedWait: false
      # 随机延迟因子
#      randomizedWaitFactor:
  instances:
    retryinInstance:
      baseConfig: base

# resilience4j TimeLimiter
resilience4j.TimeLimiter:
  configs:
    base:
      # 超时时间(单位:秒)
      timeoutDuration: 2
      # 取消正在执行的 Future
      cancelRunningFuture: true
      # 超时事件缓冲区大小
      eventConsumerBufferSize: 10
  instances:
    timelimiterInstance:
      baseConfig: base