Spring cloud 为什么不是';卡夫卡生产商Sterner记录跟踪id和跨度id?
我有一个Kafka实例和一个简单的spring引导应用程序,其中有一个REST控制器和一个Spring cloud 为什么不是';卡夫卡生产商Sterner记录跟踪id和跨度id?,spring-cloud,spring-cloud-sleuth,Spring Cloud,Spring Cloud Sleuth,我有一个Kafka实例和一个简单的spring引导应用程序,其中有一个REST控制器和一个ProducerListenerbean。控制器接受一个简单的字符串消息,并通过KafkaTemplate将其发送给Kafka。我想让ProducerListener记录一条信息消息,但缺少跟踪id和span id。在我看来,它应该包括在日志中 我使用SpringCloud侦探和SpringKafka启动器 消息本身通过Kafka主题成功地发送到另一个正确获取跟踪id的spring引导应用程序,因此我假设问
ProducerListener
bean。控制器接受一个简单的字符串
消息,并通过KafkaTemplate
将其发送给Kafka。我想让ProducerListener
记录一条信息消息,但缺少跟踪id和span id。在我看来,它应该包括在日志中
我使用SpringCloud侦探和SpringKafka启动器
消息本身通过Kafka主题成功地发送到另一个正确获取跟踪id的spring引导应用程序,因此我假设问题只与ProducerListener
有关
调试
我尝试过调试代码,结果使用了方法TracingProducer.send(..)
。那里的span实例是NoopSpan
(这很奇怪),因为TracingCallback
没有包装回调
,跟踪信息丢失。有一些讨厌的比特操作我不明白。jar就是这个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");
}
};
}
请按照文档和自述文件中的说明设置
spring.sleuth.probability=1.0
。然后您将打开跟踪功能。请按照文档和自述文件中的说明设置spring.sleuth.probability=1.0
。然后您将打开跟踪
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