Resilience4j - 记录断路器状态变化

Resilience4j - Log circuit breaker state change

关于 Resilience4J 的问题,以及如何记录断路器状态更改。

目前,Resilience4j 运行良好。能够在下游系统出现故障时调用回退,让它们有喘息的时间等等...

不幸的是,我的 Spring Webflux 2.4.4+ 应用程序遇到了问题

<dependency>
    <groupId>io.github.resilience4j</groupId>
    <artifactId>resilience4j-reactor</artifactId>
</dependency>
<dependency>
    <groupId>io.github.resilience4j</groupId>
    <artifactId>resilience4j-spring-boot2</artifactId>
</dependency>

假设我们的断路器在 T 时处于关闭模式,例如由于下游系统不可用。

在随后的调用中,由于电路打开,进入回退,当回退方法被调用时我有一个日志。

因此,我只知道 T+1 断路器何时打开。但不是断路器改变状态的确切时刻。

我想知道,如何记录断路器改变状态的事件,请问目前它确实在info级别改变状态?

您可以使用以下方法记录转换

circuitBreaker.getEventPublisher().onEvent(event -> {
   LOG.info("State change {}", event);
});

您可以使用发出的事件。这可以在 CircuitBreaker 模块文档的 部分找到 消耗发出的 CircuitBreakerEvents.

A CircuitBreakerEvent can be a state transition, a circuit breaker reset, a successful call, a recorded error or an ignored error. All events contains additional information like event creation time and processing duration of the call. If you want to consume events, you have to register an event consumer.

您对 onStateTransition 方法感兴趣(完整的事件消费者列表是 here):

circuitBreaker.getEventPublisher()
              .onStateTransition(e -> logger.info(e));

随意直接记录整个事件,因为它正确地覆盖了 toString 方法,示例日志记录如下所示:

2021-06-01T01:23:45.678901+00:00: CircuitBreaker 'myService' changed state from CLOSED to OPEN