В отличие от @KafkaListener
, похоже, что @StreamListener
не поддерживает параметр autoStartup
. Есть ли способ добиться такого же поведения для @StreamListener
? Вот мой вариант использования:
У меня есть универсальное приложение Spring, которое может прослушивать любую тему Kafka и записывать в соответствующую таблицу в моей базе данных. Для некоторых тем объем невелик, поэтому обработка одного сообщения с очень малой задержкой - это нормально. Для других тем, которые имеют большой объем, код должен получать микропакет сообщений и реже записывать в базу данных с помощью пакета Jdbc. В идеале определение для слушателей выглядело бы примерно так:
// low volume listener
@StreamListener(target = Sink.INPUT, autoStartup="${application.singleMessageListenerEnabled}")
public void handleSingleMessage(@Payload GenericRecord message) ...
// high volume listener
@StreamListener(target = Sink.INPUT, autoStartup="${application.multipleMessageListenerEnabled}")
public void handleMultipleMessages(@Payload List<GenericRecord> messageList) ...
Для темы с небольшим объемом я бы установил application.singleMessageListenerEnabled
на true и application.multipleMessageListenerEnabled
на false, и наоборот для темы с большим объемом. Таким образом, только один из слушателей будет активно слушать сообщения, а другой не будет активно слушать.
Есть ли способ добиться этого с помощью @StreamListener
?