java - 如何在 Spring sleuth 中从/到跟踪器中获取(提取)/设置 TraceContext
问题描述
我有一个要求,其中不同异步请求的完整流与跨不同服务的一个 trackingId 相关,这些服务在消息的帮助下进行异步通信,并且我需要为与一个流或 trackingId 相关的所有请求提供一个 traceId。
我遇到了从/进入 Tracer 获取/设置 TraceContext 的问题,我在下面编写了代码,但它为每个请求创建了一个新的 traceId。
TraceContext traceContext = (TraceContext) contextMap.get(trackingId);
if (traceContext == null)
{
tracing.tracer().startScopedSpan(trackingId);
traceContext = tracing.currentTraceContext().get();
} else
{
tracing.tracer().startScopedSpanWithParent(trackingId, traceContext);
}
contextMap.put(trackingId, traceContext);
解决方案
我不是 100% 确定你想在这里实现什么,据我所知,你描述的是默认行为,请参阅文档。
跟踪上下文是开箱即用的,因此所有相关的 span 都具有相同的 traceId,请参阅文档如何为消息传递设置它,还有一个用于消息传递的示例项目。
推荐阅读
- php - 带有“或”条件的 Laravel 验证
- c# - Fill complex object property List
based on string.split condition - terraform - 在 terraform 中获取当前工作目录
- python - 从图像opencv python中删除背景颜色
- javascript - 当我的模式已经打开时阻止“显示”事件(脚本重新加载)
- excel - 命名多个工作表
- openapi - 如何公开其他模型:从 Springfox 迁移到 Springdoc
- google-analytics - 自定义广告系列跟踪跨域谷歌分析
- python - session.query 返回不在数据库中的对象 - sqlalchemy
- vba - 使用活动工作表中的单元格选择将组合框填充到用户窗体中