问题描述
类似于 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。
解决方法
您应该调用 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 检索范围。您应该使用该类中的其他方法来处理网关中的上下文传播。