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

Spring Boot 3与Micrometer Baggage管理异常:为何无法正常生效?

问题诊断与修复

1. 键名不匹配

配置文件中management.tracing.baggage.remote-fields指定的是my-token,但代码中创建Baggage时使用的键是my_token,两者名称严格不匹配,导致Tracer无法识别该Baggage。需统一键名:

  • 要么将配置中的my-token改为my_token
  • 要么将代码中获取Header和创建Baggage的键改为my-token

2. 未注册自定义Baggage字段

仅配置remote-fields不足以让Tracer追踪自定义Baggage,需显式声明允许的Baggage字段。修改配置文件,添加fields节点:

management:
  tracing:
    enabled: true
    baggage:
      enabled: true
      fields:
        - my-token  # 与统一后的键名保持一致
      remote-fields:
        - my-token

fields用于注册所有可在追踪上下文中使用的Baggage字段,remote-fields则控制哪些字段需要在跨服务调用中传递。

3. Baggage作用域提前终止

代码中try-with-resources创建的BaggageInScope会在try块结束后自动关闭,但filterChain.doFilter()被放在了try块外部,导致后续Controller逻辑执行时,Baggage已不在当前作用域内。需将doFilter()调用移至try块内部:

@RequiredArgsConstructor
@Slf4j
@Component
public class TokenFilter implements Filter {
    private final Tracer tracer;

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws ServletException, IOException {
        final String myTokenValue = ((HttpServletRequest) servletRequest).getHeader("my-token");
        log.info("Token value is '{}'", myTokenValue);

        try (BaggageInScope myToken = tracer.createBaggageInScope("my-token", myTokenValue)) {
            log.info("Baggage content is {}", myToken.get());
            log.info("All baggages are {}", tracer.getAllBaggage());
            // 确保请求后续流程处于Baggage作用域内
            filterChain.doFilter(servletRequest, servletResponse);
        } catch (Exception exc) {
            log.error(exc.getMessage());
        }
    }
}

4. 过滤器顺序问题(可选)

若自定义过滤器在Micrometer Tracing过滤器之后执行,可能导致Baggage无法关联到当前Span。可通过@Order注解指定优先级,确保自定义过滤器先执行:

@Order(Ordered.HIGHEST_PRECEDENCE)
@Component
public class TokenFilter implements Filter {
    // 代码逻辑不变
}

完成以上修复后,Controller即可正常获取到Baggage数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 09:47:31