如何解决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 举报,一经查实,本站将立刻删除。