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 !!
您表现出的行为是正确的。 您有两个独立的
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
版本。