Spring cloud Sleuth 开始新的跟踪而不是在单个跟踪中继续跨度
Spring cloud Sleuth starts a new trace instead of continuing spans in a single trace
我有 4 个 spring-引导应用程序(A、B、C 和 D)。
一笔交易的生命周期如下:
- 应用程序 A 是一个 kafka 流应用程序,它最终生成一个主题是
由应用程序 B 使用。
- 应用程序 B 然后使用 @KafkaListener 从主题中消费,进行一些处理,然后使用 spring 的 jmsTemplate 生成到 IBMMQ 队列。
- 作为@JMSListener 的应用程序 C 从上述队列中消费并生成到另一个
使用 spring 的 JMSTemplate 排队。
- 再次是@JmsListener 的应用程序 D 从上述队列中使用,然后生成一个 kafka 主题,该主题再次被应用程序 A 使用
现在,对于单个事务,我希望在所有四个应用程序中进行单个跟踪,但我却得到了
- 从应用程序 A 到应用程序 B 的一个跟踪(它在其中生成到 IBM MQ)
- 从应用程序 C 开始到应用程序 A 结束的一条跟踪
我会上传图片来显示 zipkin 跨度,但由于某些原因我无法这样做。
以上所有应用程序都是 Spring 启动应用程序,它们利用 spring-cloud-sleuth 来生成事务跟踪。我依赖 spring 引导的自动配置,这些是我在所有应用程序中设置的属性:
zipkin:
enabled: ${ZIPKIN_ENABLED:false}
sender:
type: kafka
baseUrl: ${ZIPKIN_URL:http://localhost:9411}
service:
name: ${spring.application.name}
sleuth:
messaging:
kafka:
enabled: true
jms:
enabled: true
我无法理解这里到底发生了什么。为什么跨度分散在 2 条轨迹上而不是一条轨迹上?
我正在使用 spring-boot 2.3.3 和 spring-cloud-dependencies Hoxton.SR8。
所以是应用程序 B 没有传递 header。结果 queue uri 有一个 属性 targetClient
被设置为 1。uri 类似于
queue:///DESTINATION_QUEUE?targetClient=1
现在我还不是 IBM MQ 专家,但是 documentation 声明将此 属性 设置为 1 意味着 Messages do not contain an MQRFH2 header.
我将其切换为 0 瞧,所有跨度就位。
我有 4 个 spring-引导应用程序(A、B、C 和 D)。 一笔交易的生命周期如下:
- 应用程序 A 是一个 kafka 流应用程序,它最终生成一个主题是 由应用程序 B 使用。
- 应用程序 B 然后使用 @KafkaListener 从主题中消费,进行一些处理,然后使用 spring 的 jmsTemplate 生成到 IBMMQ 队列。
- 作为@JMSListener 的应用程序 C 从上述队列中消费并生成到另一个 使用 spring 的 JMSTemplate 排队。
- 再次是@JmsListener 的应用程序 D 从上述队列中使用,然后生成一个 kafka 主题,该主题再次被应用程序 A 使用
现在,对于单个事务,我希望在所有四个应用程序中进行单个跟踪,但我却得到了
- 从应用程序 A 到应用程序 B 的一个跟踪(它在其中生成到 IBM MQ)
- 从应用程序 C 开始到应用程序 A 结束的一条跟踪
我会上传图片来显示 zipkin 跨度,但由于某些原因我无法这样做。
以上所有应用程序都是 Spring 启动应用程序,它们利用 spring-cloud-sleuth 来生成事务跟踪。我依赖 spring 引导的自动配置,这些是我在所有应用程序中设置的属性:
zipkin:
enabled: ${ZIPKIN_ENABLED:false}
sender:
type: kafka
baseUrl: ${ZIPKIN_URL:http://localhost:9411}
service:
name: ${spring.application.name}
sleuth:
messaging:
kafka:
enabled: true
jms:
enabled: true
我无法理解这里到底发生了什么。为什么跨度分散在 2 条轨迹上而不是一条轨迹上?
我正在使用 spring-boot 2.3.3 和 spring-cloud-dependencies Hoxton.SR8。
所以是应用程序 B 没有传递 header。结果 queue uri 有一个 属性 targetClient
被设置为 1。uri 类似于
queue:///DESTINATION_QUEUE?targetClient=1
现在我还不是 IBM MQ 专家,但是 documentation 声明将此 属性 设置为 1 意味着 Messages do not contain an MQRFH2 header.
我将其切换为 0 瞧,所有跨度就位。