当前位置: 首页 > 知识库问答 >
问题:

将侦探跟踪id添加到请求标头

严高峻
2023-03-14

我有一个Spring Boot应用程序,它依赖于spring-cloud-starter-sleuth-3.0.3和spring-cloud-sleuth-zipkin-3.0.3。

我需要在从webclient调用API时将跟踪id传递给请求头。

@Slf4j
@Component
@RequiredArgsConstructor
public class DemoApiClient {

    private final WebClient demoWebClient;
    private final DemoProperties demoProperties;
    private final Tracer tracer;

    public Mono<DemoDetail> retrieveDemoDetail(String demo){

        return demoWebClient
                .get()
                .uri(uriBuilder->uriBuilder
                        .path(demoProperties.getLookupPath())
                        .build(demo))
                .header("trace-id", tracer.currentSpan().context().traceId())
                .accept(APPLICATION_JSON)
                .retrieve()
                .bodyToMono(DemoDetail.class)
                .doOnError(e -> log.error("Could not find demo", e));
    }    
}

示踪剂。currentSpan()为null,因此引发NPE。

根据文档,给出了将跟踪id添加到响应头的方法https://docs.spring.io/spring-cloud-sleuth/docs/3.0.3/reference/html/howto.html#how-向http服务器响应添加标头。

然而,我需要正确的方法将跟踪id添加到请求头中。

共有1个答案

花永昌
2023-03-14

安装了WebClient,请参阅文档:WebClient集成,因此跟踪信息应通过有线即时传播。

如果您想手动执行此操作(我不推荐),您需要检查您在“以上”此方法中执行的防止传播跟踪信息的操作。例如:您正在切换线程,从命令式上下文到Retor等。您可以通过在切换之前获取跟踪信息并将其传播(请参阅Scope)或将其注入此方法来解决此问题。

此外,您发送的不是整个跟踪上下文,而是traceId,因此请检查文档,让Sleuth为您传播跟踪信息。

如果您正在创建一个WebClient bean,您没有切换线程,也没有在命令式和反应式之间来回切换,并且您仍然看不到头中的跟踪信息(由Sleuth传播),您可以尝试修改插入机制,我建议使用decoration\u队列。

另外,Sleuth 3.1.x已经推出,你可以尝试升级它。

 类似资料:
  • 我正在使用侦探2.0.x,我想添加我自己的跟踪ID,除了它自己的。 我正在浏览给定的链接 https://cloud.spring.io/spring-cloud-static/spring-cloud-sleuth/2.0.0.RC2/single/spring-cloud-sleuth.html#_propagation 我想修改跟踪如下代码:-公共静态最终字符串TAG _ NAME = "

  • 我想在我的应用程序中使用spring cloud sleuth。对于每个请求,我都会在标头中获得“traceId”,我希望sleuth将其用作跟踪id。但问题是,sleuth仅在密钥为“X-B3-traceId”时才从标头中获取跟踪id。所以为了改变这一点,我使用了引用。但当我尝试构建应用程序时,我得到了以下结果: 在启动服务器时,我得到了以下信息: 我使用的是Spring boot版本--“2.

  • 我正在使用侦探,我想知道是否有可能获得当前的跟踪ID?我不需要添加任何响应或任何东西。我只是想要跟踪ID的电子邮件提醒开发团队在某些情况下。

  • 我已经开始学习Sleuth,但是我还停留在日志配置上。 我有这样的配置: 但是当我检查文件时,我缺少跟踪 Id 和 spanId。下面是示例: 这是pom.xml的片段 不知道如何在这里继续,我一直在阅读文档和堆栈溢出帖子,但仍然找不到任何答案。 提前致谢。

  • 我需要向集群中运行的Flink作业添加track和span id,请求流如下所示 使用者-- 我使用Spring Boot来创建我的rest API,并使用Spring Sleuth来添加跟踪和span id到生成的日志中,当调用rest API时添加跟踪和span id,当消息被放在Kakfa-toption-1上时也添加跟踪和span id,但我不能弄清楚如何添加跟踪和跨度ID,同时在Flin