Java 弹性4J-记录断路器状态变化

Java 弹性4J-记录断路器状态变化,java,spring-boot,event-handling,circuit-breaker,resilience4j,Java,Spring Boot,Event Handling,Circuit Breaker,Resilience4j,关于弹性4J和断路器状态变化记录的问题,请回答 目前,Resilience4j工作得很好。有能力在下游系统停机时调用回退,给他们喘息的时间,等等 不幸的是,我的SpringWebFlux 2.4.4+应用程序遇到了一个问题 <dependency> <groupId>io.github.resilience4j</groupId> <artifactId>resilience4j-reactor</artifactId>

关于弹性4J和断路器状态变化记录的问题,请回答

目前,Resilience4j工作得很好。有能力在下游系统停机时调用回退,给他们喘息的时间,等等

不幸的是,我的SpringWebFlux 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>

io.github.resilience4j
弹性4J反应堆
io.github.resilience4j
弹性4J-spring-boot2
假设我们的断路器在时间
T
时存在闭合模式,例如,由于下游系统不可用

在随后的调用中,由于电路已打开,因此进入回退,并且在调用回退方法时,我有一个日志

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


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

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

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

您可以使用发出的事件。这可在断路器模块文档第节中找到

断路器事件可以是状态转换、断路器复位、成功呼叫、记录的错误或忽略的错误。所有事件都包含其他信息,如事件创建时间和呼叫的处理持续时间。如果要使用事件,则必须注册事件使用者

您对
onstatetransformation
方法感兴趣(事件使用者的完整列表如下所示):

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

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