微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Resilience4j - 记录断路器状态变化

如何解决Resilience4j - 记录断路器状态变化

有关 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 模块文档的 Consume emitted CircuitBreakerEvents 部分中找到。

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

您对 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。