- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在关注https://github.com/archie-swif/webflux-mdc/blob/master/src/main/java/com/example/webfluxmdc/MdcContextLifter.java处的代码使用钩子(Hook)将数据从 Reactor Context 放入 MDC。
该解决方案在大多数情况下都能完美运行,但 Mono
超时且 TimeoutMainSubscriber
正在使用时除外。
下面是我使用的小测试。
Mono<Integer> integerMono = Mono.just(1)
.doOnEach(logger.addToContext(i -> ImmutableMap.of("index", i)))
.flatMap(___ -> Mono.fromSupplier(() -> {
try {
Thread.sleep(6000);
} catch (InterruptedException e) {
return 0;
}
return 1;
}))
.timeout(Duration.ofMillis(5000), Schedulers.parallel())
.doOnEach(logger.info("testMDCLogging"))
.doOnError(logger.error("testMDCErrorLogging"))
.subscriberContext(logger.initContext());
通过 MDC lifters 验证 Context 的传播时,onNext()
onError()
和 onComplete()
不会在 中调用>TimeoutMainSubscriber
(其中 Context 被复制到 MDC),仅调用 currentContext()
。
在 Mono
超时的情况下,如何传播上下文并复制到 MDC 以在 doOnError
和 doOnEach
中使用?我不想将副本移至 currentContext()
,因为此方法被调用多次,在我看来这不是最佳解决方案。
最佳答案
您是否尝试重写 MdcContextLifter 类中的 onError
方法?
@Override
public void onError(Throwable t) {
copyToMdc(coreSubscriber.currentContext()); // similar to onNext()
coreSubscriber.onError(t);
}
关于java - 在 TimeoutMainSubscriber 的情况下将 Reactor Context 复制到 MDC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60277259/
我一直在关注https://github.com/archie-swif/webflux-mdc/blob/master/src/main/java/com/example/webfluxmdc/Md
我是一名优秀的程序员,十分优秀!