【问题标题】:How do I get the current Trace ID in a Spring Cloud Gateway GlobalFilter如何在 Spring Cloud Gateway GlobalFilter 中获取当前 Trace ID
【发布时间】:2021-02-22 05:56:41
【问题描述】:

类似于Spring Cloud Sleuth- Get current traceId?,但在 Spring Cloud Gateway GlobalFilter 的上下文中

我尝试注入 Tracing 并获取 currentTracingContext,但当我获取当前跟踪上下文时它返回 null

    @Autowired
    private Tracing tracing;

    @Override
    public Mono<Void> filter(final ServerWebExchange exchange, GatewayFilterChain chain) {

        final long startNanos = System.nanoTime();
        System.out.println(tracing.currentTraceContext().get()); // NULL
        return chain
            .filter(exchange)
            .then(
                Mono.fromRunnable(() -> {
                    System.out.println(tracing.currentTraceContext().get()); // NULL
                   ...

我怀疑这是order 问题,我的过滤器没有指定任何@Order。但是,我尝试了 HIGHEST_PRECEDENCE 和 LOWEST_PRECEDENCE,仍然返回 null。

【问题讨论】:

    标签: java spring-cloud-gateway spring-cloud-sleuth


    【解决方案1】:

    您应该调用 WebFluxSpanOperators 并从 ServerWebExchange - https://github.com/spring-cloud/spring-cloud-sleuth/blob/v3.0.1/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/instrument/web/WebFluxSleuthOperators.java#L166 检索跨度。您应该使用该类中的其他方法来处理网关中的上下文传播。

    【讨论】:

    • System.out.println(WebFluxSleuthOperators.currentTraceContext(exchange));在then 方法和过滤器方法本身内部输出null。我确认我的云侦探是 3.0.1。我记得看到一个关于 MDC + Spring Sleuth + Spring Cloud Gateway 的错误,但我找不到它。
    • 嗯,我不认为在这一行“System.out.println(tracing.currentTraceContext().get()); // NULL”你会得到 traceid,除非你打开强烈建议不要使用 ON_EACH 检测模式。在代码中的那一行,在运行时真的什么都没有发生。它在处理完成的链中不断变化,您将拥有跟踪上下文
    • 好的,但是最后是怎么写出trace ID的(因为zipkin中有有效的trace)?这就是我试图在代码中找到的部分
    • 另外,docs.spring.io/spring-cloud-sleuth/docs/current-SNAPSHOT/… 默认为 ON_EACH。我也尝试明确设置。
    • 不适用于网关。对于网关,它是 MANUAL github.com/spring-cloud/spring-cloud-sleuth/issues/1710
    猜你喜欢
    • 2021-07-24
    • 2020-03-10
    • 2020-02-17
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 2020-08-26
    • 2016-12-10
    相关资源
    最近更新 更多