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

如何在Spring云网关全局筛选中获取当前的跟踪 ID

毕浩渺
2023-03-14

类似于Spring Cloud Sleuth-获取当前traceId?但在Spring Cloud Gateway GlobalFilter的背景下

我尝试注入TringingContext并获取当前的TracingContext,但当我获取当前的跟踪上下文时,它返回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。

共有1个答案

拓拔霄
2023-03-14

您应该调用WebFluxSpanOperators并从ServerWebExchange中检索spanhttps://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。您应该使用该类中的其他方法来处理网关中的上下文传播。

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

  • 我正在Spring Boot项目(版本2.2.6)中使用Spring Cloud Gateway和Spring Security。我有一个自定义的预过滤器,它需要在将请求转发给下游服务之前向请求添加头部。Pre过滤器需要读取Spring Security的Authentication对象以获取权限,然后才能添加头部(它需要根据权限进行一些查找)。由于Spring Cloud Gateway是反应式

  • 问题内容: 如何获得Java中的当前堆栈跟踪,就像你可以在.NET中那样? 我找到了,但这不是我想要的-我想找回堆栈跟踪信息,而不是打印出来。 问题答案: 你可以使用。 这将返回一个数组,该数组代表程序的当前堆栈跟踪。

  • Spring Cloud Gateway作为OAuth2ResourceServer,具有以下授权配置: 我有一个全局过滤器,负责在每个有效的身份验证请求中执行一些功能,如下所示: 我仍处于学习阶段。任何可能的线索将不胜感激。

  • 我将Thymeleaf模板引擎与Spring Web MVC结合使用,在使用当前url创建url时遇到了问题。有没有办法获取Thymeleaf HTML文件中的最新信息?例如:假设我在浏览器地址栏中的当前url是: 现在我想做一个这样的URL < code > http://localhost:8080/project/web/category/mobiles/store/Samsung 或

  • 我正在尝试在Spring Cloud Gateway中启用RequestRateLimiter。我havr配置了其他过滤器,甚至是自定义过滤器,但当我将其添加到我的路由中时: 我得到了这个异常(当然,如果我移除RequestRateLimiter筛选器并只保留StripPrefix条目,一切正常。我已经删除了异常的代码):