Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 将traceId添加到具有协同路由的kotlin反应式api_Spring Boot_Kotlin_Spring Webflux_Kotlin Coroutines_Opentracing - Fatal编程技术网

Spring boot 将traceId添加到具有协同路由的kotlin反应式api

Spring boot 将traceId添加到具有协同路由的kotlin反应式api,spring-boot,kotlin,spring-webflux,kotlin-coroutines,opentracing,Spring Boot,Kotlin,Spring Webflux,Kotlin Coroutines,Opentracing,我有一个带有Kotlin/spring/Reactor/Coroutines的springapi 类似:suspend fun method():字符串{return myService.data()} 我想将traceId添加到调用myService.data(), traceId来自标题中上面的调用(来自Jaerger/Opentracing) 作为解决方案,我找到了库:实现(“org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:1.3.9”) 当我

我有一个带有Kotlin/spring/Reactor/Coroutines的springapi 类似:
suspend fun method():字符串{return myService.data()}

我想将traceId添加到调用
myService.data()
, traceId来自标题中上面的调用(来自Jaerger/Opentracing)

作为解决方案,我找到了库:实现(“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()

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