Spring 集成 - TransactionSynchronizationFactory 中的 TraceId 已更改

问题描述 投票:0回答:1

Poller

IntegrationFlow
 绑定事务时,
TraceId 会发生更改。

调试示例可在 https://github.com/syedyusufh/transaction-sync-traceid

 2025-01-05T21:33:21.726+04:00[ INFO 1396 --- [transaction-sync-traceid] [   scheduling-1] [677ac2610ebc3f65f920ea37a7aa2cb8-f920ea37a7aa2cb8] [0;39m[36mc.i.s.c.PollerWithTransactionFlowConfig  :Supplied Message is: Good Day
 2025-01-05T21:33:21.733+04:00[ INFO 1396 --- [transaction-sync-traceid] [   scheduling-1] [677ac26181d6b7f5f53ebcee6f7e914a-f53ebcee6f7e914a] [0;39m[36mc.i.sample.config.TransactionConfig      :Transaction Committed, but traceId is different here !!
spring-integration
1个回答
0
投票

您表现出的行为是正确的。 您有两个独立的

MessageHandler
实例:

.handle(m -> log.info("Supplied Message is: {}", m.getPayload()))

.handle(m -> log.info("Transaction Committed, but traceId is different here !!"))

他们都开始

IntegrationObservation.HANDLER
观察并在完成后停止。只是没有共同的观察可供他们继承。

我们可以像这样装饰

TaskScheduler
:

@Bean
ThreadPoolTaskSchedulerCustomizer observationTaskSchedulerCustomizer(ObservationRegistry observationRegistry,
        @Value("${spring.application.name}") String serviceName) {

    return taskScheduler ->
            taskScheduler.setTaskDecorator(runnable ->
                    () -> Observation
                            .createNotStarted("parent-observation", observationRegistry)
                            .lowCardinalityKeyValue("service.name", serviceName)
                            .observe(() -> {
                                log.info("Observation started");
                                runnable.run();
                            }));
}

这样我们得到的日志如下:

2025-01-06T10:53:33.214-05:00  INFO 32228 --- [transaction-sync-traceid] [   scheduling-1] [677bfc7da1c76ab89976d08029659354-9976d08029659354] c.i.s.c.PollerWithTransactionFlowConfig  : Observation started
2025-01-06T10:53:33.227-05:00  INFO 32228 --- [transaction-sync-traceid] [   scheduling-1] [677bfc7da1c76ab89976d08029659354-dd0c41266af5744b] c.i.s.c.PollerWithTransactionFlowConfig  : Supplied Message is: Good Day
2025-01-06T10:53:33.233-05:00  INFO 32228 --- [transaction-sync-traceid] [   scheduling-1] [677bfc7da1c76ab89976d08029659354-52890ce7dfc5e14d] c.i.sample.config.TransactionConfig      : Transaction Committed, but traceId is different here !!

这可能是我们在 Spring Integration 中可以为启动这些计划任务的所有

AbstractPollingEndpoint
所做的事情。 请随意提出相应的 GH 问题,我们将研究即将推出的
6.5
版本。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.