Spring Boot 3.1.3+Micrometer下JMS消息缺失Trace ID求助
Spring Boot 3 + Micrometer:JMS消息收发未自动添加TraceId(对比Spring Boot 2 + Sleuth)
我有两个结构相似的POC项目:一个基于Spring Boot 2.7 + Sleuth,另一个基于Spring Boot 3.1.3 + Micrometer,核心代码完全一致。前者中,使用JmsTemplate发送消息、@JmsListener接收消息时,Receiver的日志会自动带上traceId和spanId;但后者的Receiver日志里完全没有链路追踪信息,看起来Micrometer没有给JMS消息添加traceId。
核心代码如下:
Receiver类
@Component public class Receiver { private static Logger logger = LoggerFactory.getLogger(Receiver.class); @JmsListener(destination = "test-queue") // @Observed public void receive(String s) { logger.info("received message: {}", s); } }
Sender类
@RestController public class Sender { private static Logger logger = LoggerFactory.getLogger(Sender.class); @Autowired JmsTemplate jmsTemplate; @GetMapping @ResponseStatus(HttpStatus.ACCEPTED) public void send() { logger.info("sending message..."); jmsTemplate.convertAndSend("test-queue", "hello"); } }
请问是不是Micrometer版本遗漏了什么额外配置?
解决方案
Spring Boot 3里Micrometer Tracing对JMS的支持逻辑和Sleuth不一样,需要补充以下配置:
补全依赖
除了基础的Micrometer追踪依赖,还要确保引入spring-boot-starter-actuator,完整依赖示例(Maven):<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-tracing</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-tracing-bridge-brave</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jms</artifactId> </dependency>启用JMS观测配置
要么给@JmsListener方法加上@Observed注解(你代码里注释掉了,这是Micrometer追踪JMS方法的必要标记):@JmsListener(destination = "test-queue") @Observed public void receive(String s) { logger.info("received message: {}", s); }要么通过全局配置自动启用JMS观测:
micrometer.observation.jms.enabled=true配置日志输出traceId/spanId
确保日志格式(比如Logback的logback-spring.xml)包含traceId和spanId的占位符,示例:<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} [%X{traceId},%X{spanId}] - %msg%n</pattern>
完成上述配置后,Receiver的日志就能正常输出traceId和spanId了。
内容的提问来源于stack exchange,提问作者Matti
相关产品推荐
相关产品推荐

