Spring Kafka не возвращает ноль для записей Tombstone во время пакетной обработки - PullRequest
0 голосов
/ 25 февраля 2019

Кажется, что пружина Spring Kafka игнорирует примечание @Payload(required = false) во время пакетной обработки.По крайней мере, вместо получения null для Tombstone я всегда получаю KafkaNull объектов независимо от того, что установлено в @Payload аннотации.

Мой код выглядит следующим образом:

@KafkaListener(topics = ["\${kafka.topic.categories}"])
fun receive(
   @Header(KafkaHeaders.RECEIVED_MESSAGE_KEY) List<String> keys,
   @Payload(required = false) categories: List<Category>
) {
    ...
}

Ничего особенного.Я получаю список записей, но всегда KafkaNull как запись Tombstone, что приводит к исключению приведения класса.

В не пакетном режиме все работает отлично, как и ожидалось.

У вас есть идеи, почему это так?

ОБНОВЛЕНИЕ: Исправлено через https://github.com/spring-projects/spring-kafka/issues/974

1 Ответ

0 голосов
/ 25 февраля 2019

Это ограничение способа, которым достигается преобразование аргумента.

С List<Foo> аргумент является списком вещей, а распознаватель аргументов не видит «вещи»;с помощью @Payload(required = false) Foo мы можем обнаружить KafkaNull в распознавателе аргументов.

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

...