Die Trace-ID im Spring Cloud Gateway GlobalFilter (Brave + Zipkin) kann nicht abgerufen werden.
Posted: 05 Jan 2025, 13:47
Ich habe einen Post-Filter, der versucht, die Trace-ID als Header in die Antwort einzufügen. Ich habe die Vorschläge hier befolgt, aber der TraceContext ist immer noch null.
Abhängigkeiten
Wenn es darauf ankommt, weiß ich, dass der Kontext weitergegeben wird, da ich die Trace-IDs dienstübergreifend in den Protokollen und in Zipkin sehen kann.
Code: Select all
@Slf4j
@Configuration
public class PostFilters {
public static final String CORRELATION_ID = "X-CORRELATION-ID";
@Bean
public GlobalFilter correlationIdPostFilter() {
return(exchange, chain) -> chain.filter(exchange)
.then(Mono.just(exchange))
.map(serverWebExchange -> {
TraceContext traceContext = WebFluxSleuthOperators.currentTraceContext(serverWebExchange);
log.info("Trace Context: {}", traceContext;
if (traceContext != null) {
serverWebExchange.getResponse().getHeaders().set(CORRELATION_ID, traceContext.traceId());
}
return serverWebExchange;
})
.then();
}
}
Code: Select all
org.springframework.boot
spring-boot-starter-actuator
io.micrometer
micrometer-tracing-bridge-brave
io.zipkin.reporter2
zipkin-reporter-brave
io.zipkin.reporter2
zipkin-sender-okhttp3
org.springframework.cloud
spring-cloud-sleuth-instrumentation