我有一个Kafka实例和一个带有一个REST控制器和一个ProducerListener
bean的简单的Spring Boot应用程序。控制器接受简单的String
消息,然后通过KafkaTemplate
发送到Kafka。我希望ProducerListener
记录一条信息消息,但是缺少跟踪ID和跨度ID。我认为它应该包含在日志中。
我使用Spring Cloud Sleuth和Spring Kafka启动器。
消息本身已通过Kafka主题成功发送到了另一个正确获取跟踪ID的spring boot应用程序,因此我认为问题仅与ProducerListener
有关。
我尝试调试代码,最终遇到方法TracingProducer.send(..)
。那里的span实例是NoopSpan
(这很奇怪),因此TracingCallback
不会包装Callback
,并且跟踪信息会丢失。有一些我不明白的讨厌的操作。罐子就是这个brave-instrumentation-kafka-clients-5.7.0.jar
控制器
@PostMapping("/pass-to-kafka")
public void passToKafka(@RequestBody String message) {
logger.info("This log message has trace id and span id");
kafkaTemplate.send("my-test-topic", message);
}
生产者监听器
@Bean
public ProducerListener myProducerListener() {
return new ProducerListener<>() {
@Override
public void onSuccess(ProducerRecord producerRecord, RecordMetadata recordMetadata) {
logger.info("This log message is missing trace id and span id");
}
};
}
带有代码的项目位于GitHub:https://github.com/vaclavnemec/kafka-sleuth-problem
我希望该信息消息写出跟踪ID和跨度ID。两个记录器中的值应该相同。
INFO [bar,208706b5c40f8e93,208706b5c40f8e93,false] com.example.demo.Controller: This log message has trace id and span id
.
.
.
INFO [bar,,,] com.example.demo.DemoApplication: This log message is missing trace id and span id
答案 0 :(得分:0)
请按照文档和自述文件中的说明设置spring.sleuth.probability=1.0
。然后,您将打开跟踪。