Как распространить идентификатор корреляции из ThreadLocal в заголовки Kafka в распределенной системе Spring Boot 3?JAVA

Программисты JAVA общаются здесь
Anonymous
Как распространить идентификатор корреляции из ThreadLocal в заголовки Kafka в распределенной системе Spring Boot 3?

Сообщение Anonymous »

Я реализую уровень наблюдения в экосистеме Spring Boot 3.2.0, чтобы обеспечить распределенную трассировку между несколькими микросервисами.
У меня есть ContextInterceptor, который захватывает идентификатор корреляции из входящих HTTP-запросов и сохраняет его в ThreadLocal через оболочку RequestContext. Это прекрасно работает для синхронного потока.
Однако я пытаюсь использовать лучший метод распространения этого контекста при асинхронной отправке сообщений в Apache Kafka. Я хочу, чтобы корреляция-id вводилась в заголовки Kafka, не загрязняя мою бизнес-логику инфраструктурным кодом.
Каков стандартный подход к «обертыванию» Kafka Producer для автоматического включения этих заголовков из текущего контекста ThreadLocal?

public void sendWithContext(String payload) {
ProducerRecord record = new ProducerRecord("topic", payload);

String correlationId = MyContextHolder.get();
record.headers().add("correlation-id", correlationId.getBytes());

kafkaTemplate.send(record);
}

Вернуться в «JAVA»