Sleuth traceId 和 spanId 未登录到 activeMQ 侦听器中

时间:2021-06-24 08:02:38

标签: activemq spring-cloud-sleuth

我正在尝试使用 Sleuth 和 ActiveMQ 配置微服务。 开始请求时,我可以在生产者的日志中正确看到 appName、traceId 和 spanId,但在侦听器中将消息出列后,我只找到了 appName,没有 traceId 和 spanId。 如何填写此字段?

现在我正在使用 spring.sleuth.messaging.jms.enabled=false 以避免在启动时出现此异常:

  • 名为“connectionFactory”的 Bean 应该是“org.apache.activemq.ActiveMQConnectionFactory”类型,但实际上是“org.springframework.cloud.sleuth.instrument.messaging.LazyConnectionFactory”类型

我的依赖:

  • org.springframework.boot.spring-boot-starter-activemq 2.5.1

  • org.springframework.cloud.spring-cloud-sleuth 3.0.3

谢谢大家!

1 个答案:

答案 0 :(得分:0)

我的理解是,您要查找的属性是在发送消息时在 JMS 消息上设置的,然后在使用消息时从消息中检索。由于您设置了 spring.sleuth.messaging.jms.enabled=false,因此您禁用了此功能。请参阅 the documentation,其中说明:

<块引用>

我们检测 JmsTemplate 以便将跟踪标头注入到消息中。我们还支持使用方的 @JmsListener 注释方法。

要阻止此功能,请将 spring.sleuth.messaging.jms.enabled 设置为 false

如果您想将 Sleuth 与 Spring JMS 一起使用,您需要找到连接工厂问题的替代解决方案。如果您在某处注入 org.apache.activemq.ActiveMQConnectionFactory,那么您几乎肯定应该使用 javax.jms.ConnectionFactory。使用具体类型不利于可移植性和像这样动态使用包装器实现的用例。