From 253def06daf8a55e706e5dc0bf93c0cb9a172276 Mon Sep 17 00:00:00 2001 From: DaxPay Dev Date: Tue, 23 Jun 2026 10:09:54 +0800 Subject: [PATCH] =?UTF-8?q?fix(artemis):=20=E4=BF=AE=E5=A4=8D=20Topic=20?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E9=93=BE=E8=B7=AF=E8=BF=BD=E8=B8=AA=E6=96=AD?= =?UTF-8?q?=E8=A3=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 自定义的 topicJmsTemplate 和 topicListenerFactory 未注入 ObservationRegistry, 导致 Topic 消息不写入/提取 traceparent, trace 在 MQ 边界断裂(Queue/Delay 不受影响)。 修复后 Topic 场景 trace 与 Queue/Delay 一样贯穿, 同时修复业务侧缓存失效广播的 trace 断裂。 --- .../artemis/ArtemisCommonAutoConfiguration.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/daxpay-platform/daxpay-platform-common/common-artemis/src/main/java/cn/daxpay/open/platform/common/artemis/ArtemisCommonAutoConfiguration.java b/daxpay-platform/daxpay-platform-common/common-artemis/src/main/java/cn/daxpay/open/platform/common/artemis/ArtemisCommonAutoConfiguration.java index b3f45f199..2be8566e4 100644 --- a/daxpay-platform/daxpay-platform-common/common-artemis/src/main/java/cn/daxpay/open/platform/common/artemis/ArtemisCommonAutoConfiguration.java +++ b/daxpay-platform/daxpay-platform-common/common-artemis/src/main/java/cn/daxpay/open/platform/common/artemis/ArtemisCommonAutoConfiguration.java @@ -1,5 +1,6 @@ package cn.daxpay.open.platform.common.artemis; +import io.micrometer.observation.ObservationRegistry; import jakarta.jms.ConnectionFactory; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -52,10 +53,13 @@ public class ArtemisCommonAutoConfiguration { /// 不设置 MessageConverter,回落到 Spring 默认 `SimpleMessageConverter`(String ↔ TextMessage 透传)。 @Bean(ArtemisBeanNames.TOPIC_JMS_TEMPLATE) @ConditionalOnMissingBean(name = ArtemisBeanNames.TOPIC_JMS_TEMPLATE) - public JmsTemplate topicJmsTemplate(ConnectionFactory connectionFactory) { + public JmsTemplate topicJmsTemplate(ConnectionFactory connectionFactory, + ObservationRegistry observationRegistry) { JmsTemplate template = new JmsTemplate(connectionFactory); // 关键:开启 pub-sub 模式,destination 解析为 Topic(multicast) template.setPubSubDomain(true); + // 启用 jms.message.publish observation, 把 traceparent 写入 message property, 让 trace 跨 MQ 传播 + template.setObservationRegistry(observationRegistry); return template; } @@ -66,12 +70,15 @@ public class ArtemisCommonAutoConfiguration { /// 取代各业务模块自行创建重复的 Topic ListenerFactory。 @Bean(ArtemisBeanNames.TOPIC_LISTENER_FACTORY) @ConditionalOnMissingBean(name = ArtemisBeanNames.TOPIC_LISTENER_FACTORY) - public JmsListenerContainerFactory topicListenerFactory(ConnectionFactory connectionFactory) { + public JmsListenerContainerFactory topicListenerFactory(ConnectionFactory connectionFactory, + ObservationRegistry observationRegistry) { DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); factory.setConnectionFactory(connectionFactory); // Topic 模式(pub-sub),对应 broker 端 multicast 路由类型 factory.setPubSubDomain(true); factory.setAutoStartup(true); + // 启用 jms.message.process observation, 从 message property 提取 traceparent 恢复 parent context + factory.setObservationRegistry(observationRegistry); return factory; } }