Поэтому я отправляю несколько сообщений через Kafka с набором 'traceparent'.
Проблема заключается в том, что при использовании сообщений в пакетном режиме каждое сообщение имеет уникальный идентификатор трассировки и идентификатор диапазона, отправленные из приложения-производителя. Поскольку эти сообщения обрабатываются последовательно в одном потоке, идентификаторы трассировки и диапазона не фиксируются автоматически и не отображаются в журналах.
Код: Выделить всё
@KafkaListener(containerFactory = "tracingKafkaConsumerFactory", topics = "tracingTopic3")
public void kafkaTracingListener(ConsumerRecords consumerRecords){
consumerRecords.forEach(consumerRecord ->{
----> //do some task // для каждой записи потребителя я хочу установить идентификатор трассировки из заголовка и начать новый диапазон.[/b]
Мои усилия ниже — это запуск нового диапазона и нового идентификатора трассировки. Но мне нужен старый идентификатор трассировки, который отправляется в заголовке Kafka
[code] String[] arr = new String(header.value(), StandardCharsets.UTF_8).split("-"); // value is like this 00-66afb33c8814286cee3c4ca3cf7f6e9b-8f2981500a0dbe79-01
Span newSpan = tracer.nextSpan().start();
var context = tracer.traceContextBuilder().traceId(arr[1]).spanId(newSpan.context().spanId())
.parentId(arr[2]).build();
tracer.spanBuilder().setParent(context).start();
try (var inScope = tracer.withSpan(newSpan)) {
log.info("consumer record {}", consumerRecord);
} finally {
newSpan.end();
}
Подробнее здесь: https://stackoverflow.com/questions/788 ... aceid-same