SpringBoot 2升级3.1后@RabbitListener日志丢失TraceId/SpanId求助
SpringBoot 3.1升级后@RabbitListener链路追踪(TraceId/SpanId)丢失解决方法
核心解决步骤
开启容器工厂的观测功能
注解式@RabbitListener依赖容器工厂处理消息,必须给对应的容器工厂开启observationEnabled:- 代码配置方式(自定义容器工厂):
@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; } }- 配置文件方式(使用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
相关产品推荐
相关产品推荐

