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

SpringBoot 2升级3.1后@RabbitListener日志丢失TraceId/SpanId求助

SpringBoot 3.1升级后@RabbitListener链路追踪(TraceId/SpanId)丢失解决方法

核心解决步骤

  • 开启容器工厂的观测功能
    注解式@RabbitListener依赖容器工厂处理消息,必须给对应的容器工厂开启observationEnabled:

    1. 代码配置方式(自定义容器工厂):
    @Configuration
    public class RabbitMQConfig {
        @Bean
        public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory,
                                                                                  MicrometerObservationRegistry observationRegistry) {
            SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
            factory.setConnectionFactory(connectionFactory);
            // 启用观测以开启链路追踪
            factory.setObservationEnabled(true);
            // 绑定自动配置的观测注册表
            factory.setObservationRegistry(observationRegistry);
            return factory;
        }
    }
    
    1. 配置文件方式(使用SpringBoot自动配置的容器工厂):
    spring:
      rabbitmq:
        listener:
          simple:
            observation-enabled: true
          # 若使用Stream类型监听,配置下面的节点
          stream:
            observation-enabled: true
    
  • 移除无效的NOOP Tracer代码
    你之前使用的Tracer.NOOP是无操作实现,无法生成真实的链路Span,直接删除这段代码即可,SpringBoot会自动配置有效的Tracer实例(依赖micrometer-tracing相关组件)。

  • 确保依赖完整
    SpringBoot 3.1的链路追踪需要引入micrometer-tracing相关starter,Maven示例:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-tracing-bridge-brave</artifactId>
    </dependency>
    <!-- 若需要将链路数据上报到Zipkin,添加此依赖 -->
    <dependency>
        <groupId>io.zipkin.reporter2</groupId>
        <artifactId>zipkin-reporter-brave</artifactId>
    </dependency>
    
  • 调整日志配置输出TraceId/SpanId
    确保日志格式中包含链路追踪变量,比如在application.yml中配置:

    logging:
      pattern:
        console: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %X{traceId:-} %X{spanId:-}%n"
    

    若使用logback.xml,在encoder的pattern中加入%X{traceId:-} %X{spanId:-}即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 02:46:00