gateway网关入口 统一颁发traceId追踪,在下游微服务之间传递
gateway服务中增加全局过滤器 TraceIdGlobalFilter 处于最优先级,因为所有请求都要挂上traceId
@Component
@Slf4j
public class TraceIdGlobalFilter implements GlobalFilter, Ordered {
/**
* 统一 traceId key
*/
private final String traceId = "traceId";
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String oldTraceId = exchange.getRequest().getHeaders().getFirst(traceId);
if (null != oldTraceId && oldTraceId.length() > 0) {
MDC.put(traceId, oldTraceId);
} else {
String uuid = UUID.randomUUID().toString();
MDC.put(traceId, uuid);
exchange.getRequest()
.mutate()
.headers(httpHeaders -> httpHeaders.add(traceId, uuid));
}
return chain.filter(exchange);
}
@Override
public int