У меня есть экземпляр Kafka и простое приложение весенней загрузки с одним контроллером REST и компонентом ProducerListener
. Контроллер принимает простое сообщение String
и отправляет его Кафке через KafkaTemplate
. Я хочу, чтобы ProducerListener
зарегистрировал информационное сообщение, но идентификатор трассы и идентификатор диапазона отсутствуют. На мой взгляд, это должно быть включено в журнал.
Я использую Spring Cloud Sleuth и Spring Kafka.
Само сообщение успешно отправляется через тему Kafka в другое приложение весенней загрузки, которое получаетидентификатор трассировки правильно, поэтому я предполагаю, что проблема связана только с 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
Я ожидаю, что в информационном сообщении будет записан идентификатор трассы и идентификатор диапазона. Это должны быть одинаковые значения в обоих регистраторах.
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