使用协程将traceId添加到kotlin反应式api中



我有一个带有Kotlin/spring/Rector/Coroutines的spring-api类似:suspend fun method(): String { return myService.data() }

我想添加traceId来调用CCD_ 2,traceId来自头中的调用(来自Jaerger/Opentraceing(

作为解决方案,我发现了库:实现("org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:1.3.9"(当我打电话时,我应该键入代码:

withContext(MDCContext()) {
logger.info("call my service")
myService.data()
}

问题是:如何将traceId从header放入MDC协程上下文,并且可能需要添加WebFilter来获取请求标头并创建类似请求协程上下文的内容?

有什么想法吗?

与@EugeneZacharov:找到了如何获取上下文->Mono.deferWithContext { ctx -> Mono.just(ctx) }.awaitFirst()

  1. 添加WebFilter
  2. 将上面过滤器中的traceId标头复制到ReactorContext
  3. 添加ext fun,在需要时添加MDC数据:
suspend fun Logger.debugWithMDC(message: String) {
if (isDebugEnabled) {
val context = Mono.deferWithContext { ctx -> Mono.just(ctx) }.awaitFirst()
context.copyToMdc()
this.debug(message)
MDC.clear()
}
}
  1. 利润

最新更新