1

有关 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级别的状态,好吗?

4

2 回答 2

1

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

CircuitBreakerEvent 可以是状态转换、断路器重置、成功调用、记录的错误或忽略的错误。所有事件都包含附加信息,例如事件创建时间和调用的处理持续时间。如果你想消费事件,你必须注册一个事件消费者。

您对该onStateTransition方法感兴趣(事件消费者的完整列表在这里):

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

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

2021-06-01T01:23:45.678901+00:00: CircuitBreaker 'myService' changed state from CLOSED to OPEN
于 2021-06-01T04:19:38.547 回答
1

您可以使用以下内容记录转换

circuitBreaker.getEventPublisher().onEvent(event -> {
   LOG.info("State change {}", event);
});
于 2021-06-01T04:02:27.140 回答