Весенняя кафка и мдк

У меня есть потребитель Kafka, реализованный как:

@KafkaListener(topics="...", group-id="....")
public void doProcessing(@Payload String data, @Headers Map<String, Object> headers)
{
//read one of the headers and get a unique id pertaining for thread
//set that header value in MDC
String messageUniqueIdentifier=headers.get("myRequestIdentifierKey");
MDC.put("myRequestIdentifierKey",messageUniqueIdentifier)
log.info("logging just to see if the unique identifier comes in the logs or not);
//do some processing
}

Это безопасный подход? Всегда ли гарантируется, что один и тот же поток будет обслуживать одно сообщение у потребителя?

1 ответ

Непонятно, о чем вы спрашиваете. Если у вас есть параллелизм, то будет более одного потока, но каждое сообщение будет обрабатываться в одном потоке (если ваш слушатель не передает другой поток).

Итак, до тех пор, пока вы каждый раз устанавливаете MDC в слушателе и не переключаетесь на другой поток; это будет работать.

Если у вас есть только один поток, один и тот же поток будет использоваться для каждого сообщения (если только контейнер не будет остановлен и перезапущен, в этом случае он получит новый поток).

Другие вопросы по тегам