You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非Spring应用使用Spring Webflux WebClient时如何生成合规traceID

非Spring应用生成符合B3规范TraceID的实现方案

生成规则

下游Spring Cloud服务默认遵循B3链路追踪协议,TraceID需满足以下要求:

  • 仅由小写十六进制字符(0-9、a-f)组成
  • 长度为16位(对应64位)或32位(对应128位,当前主流推荐)
  • 不得包含特殊符号、大写字母

实现代码

1. 编写TraceID生成工具方法

直接用JDK自带的UUID生成即可,无需额外引入第三方依赖:

import java.util.UUID;

/**
 * 生成符合B3规范的32位TraceID
 */
public static String generateB3TraceId() {
    // 去掉UUID的横杠,转小写,刚好得到32位十六进制字符串
    return UUID.randomUUID().toString().replace("-", "").toLowerCase();
}

/**
 * 可选:生成符合B3规范的16位SpanID,带上后下游服务兼容性更好
 */
public static String generateB3SpanId() {
    return UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0, 16);
}

2. 改造WebClient请求代码

把生成的TraceID和可选的SpanID放到请求头即可,下游Spring服务的Sleuth组件会自动识别并透传:

final var traceId = generateB3TraceId();
final var spanId = generateB3SpanId();
final var response = webClient.post()
        .uri("http://some-third-party-api.com/someroute")
        .header("X-B3-TraceId", traceId)
        .header("X-B3-SpanId", spanId)
        // 可选采样标识,1表示需要采样记录链路,0表示不采样,按需设置即可
        .header("X-B3-Sampled", "1")
        .body(BodyInserters.fromValue(payload))
        .retrieve()
        .bodyToMono(String.class)
        .block();

注意事项

  • 不要生成不符合长度和字符要求的TraceID,否则下游Sleuth会识别失败,自动生成新的TraceID,导致链路断裂。
  • 同一条业务请求链路如果要调用多个下游接口,需复用同一个TraceID,每次调用生成新的SpanID即可,保证链路关联。
  • 无需引入任何Spring Cloud Sleuth相关依赖,只要按照规则生成字符串即可完成透传。

内容的提问来源于stack exchange,提问作者PatPanda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:42:01