Весенняя кафка и мдк
У меня есть потребитель 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 в слушателе и не переключаетесь на другой поток; это будет работать.
Если у вас есть только один поток, один и тот же поток будет использоваться для каждого сообщения (если только контейнер не будет остановлен и перезапущен, в этом случае он получит новый поток).