弹簧启动执行器运行状况端点+动态弹性4j断路器

时间:2020-03-04 14:33:57

标签: java spring-boot spring-boot-actuator resilience4j

我有一个Spring Boot应用程序,它使用resilience4j个基于AOP的@CircuitBreaker s。

现在,我想在/actuator/health端点中提供断路器的信息,但是在JSON输出中没有看到details.circuitBtreakers对象described in the docs

我在做什么错了?


通过比较,要使动态缓存信息出现在/actuator/metrics端点中,需要进行少量的自定义连接,但这是well documented。我想知道是否有类似的技巧可以申请将动态定义的@CircuitBreaker注册到/actuator/health端点。

MyService.java

@Service
public class MyService {
    @Autowired
    private CacheManager cacheManager;
    @Autowired
    private CacheMetricsRegistrar cacheMetricsRegistrar;

    @PostConstruct
    public void postConstruct() {
        // On-the-fly defined (annotation-based) caches are not auto-registered with micrometer metrics.
        final Cache cache = cacheManager.getCache("myCache");
        cacheMetricsRegistrar.bindCacheToRegistry(cache);
    }

    @CircuitBreaker(name = "myCB", fallbackMethod = "fallbackCallAnApi")
    public String callAnApi() throws RestClientException {
        // ...
    }

    @Cacheable("myCache")
    public String getSomethingCacheable() {
        // ...
    }
}

application.properties

resilience4j.circuitbreaker.configs.default.registerHealthIndicator=true
management.endpoints.web.expose=health,metrics
management.endpoints.web.exposure.include=health,metrics
management.endpoint.health.enabled=true
management.endpoint.metrics.enabled=true
management.metrics.enable.resilience4j.circuitbreaker.calls=true
management.health.circuitbreakers.enabled=true

1 个答案:

答案 0 :(得分:1)

为HealthIndicator端点动态注册CircuitBreakers目前无法正常工作。 不幸的是,您必须对其进行配置:

resilience4j.circuitbreaker:
    configs:
        default:
            registerHealthIndicator: true
    instances:
        myCB:
            baseConfig: default

您可以说这是一个错误。

https://github.com/resilience4j/resilience4j/blob/master/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/health/CircuitBreakersHealthIndicator.java#L99-L102