如何在Resilience4j Spring Starter中配置事件

问题描述

我已经通过resilience4j断路器工厂bean进行了如下配置。但是我无法获得ovveride事件监听器示例的打开,关闭功能。请帮助

@Bean
public Customizer<Resilience4JCircuitBreakerFactory> globalCustomConfiguration() {
    CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
            .failureRateThreshold(Float.parseFloat(failureRateThreshold))
            .waitDurationInopenState(Duration.ofMillis(Long.parseLong(waitDurationInopenState)))
            .slidingWindowSize(Integer.parseInt(slidingWindowSize)).build();
    TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig.custom()
            .timeoutDuration(Duration.ofSeconds(Long.parseLong(timelimiterDuration))).build();

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

解决方法

我建议使用resilience4j-spring-boot2。它提供了很多功能,例如注释支持,外部配置,指标等等-> https://resilience4j.readme.io/docs/getting-started-3

我们的启动器支持以下内容:

您可以添加一个RegistryEventConsumer bean,以便将事件使用者添加到新创建的实例中。 例如,可以将RegistryEventConsumer添加到CircuitBreakerRegistry,以便将日志记录事件使用者注册到每个新创建的CircuitBreaker实例。

@Bean
public RegistryEventConsumer<CircuitBreaker> myRegistryEventConsumer() {

    return new RegistryEventConsumer<CircuitBreaker>() {
        @Override
        public void onEntryAddedEvent(EntryAddedEvent<CircuitBreaker> entryAddedEvent) {
            entryAddedEvent.getAddedEntry().getEventPublisher().onEvent(event -> LOG.info(event.toString()));
        }

        @Override
        public void onEntryRemovedEvent(EntryRemovedEvent<CircuitBreaker> entryRemoveEvent) {

        }

        @Override
        public void onEntryReplacedEvent(EntryReplacedEvent<CircuitBreaker> entryReplacedEvent) {

        }
    };
}