Как распространить идентификатор корреляции из 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);
}
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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