Spring KafkaListener: как узнать, когда он будет готов
У меня есть простое приложение Spring Boot, которое читает из Kafka и пишет в Kafka. Я написал SpringBootTest
используя EmbeddedKafka
чтобы проверить все это.
Основная проблема: иногда тест не проходит, потому что тест отправляет сообщение Kafka слишком рано. Таким образом, сообщение уже записано в Kafka перед приложением Spring (или его KafkaListener
если быть точным) готов. Поскольку слушатель читает из latest
смещение (я не хочу изменять какие-либо настройки для моего теста - кроме bootstrap.servers), он не будет получать все сообщения в этом тесте.
Кто-нибудь имеет представление, как я мог узнать в тесте, что KafkaListener
готов получать сообщения?
Единственный способ, которым я мог думать, это ждать /health
доступно, но я понятия не имею, могу ли я быть уверен, что это подразумевает KafkaListener
быть готовым на все.
Любая помощь с благодарностью!
С наилучшими пожеланиями.
2 ответа
Если у тебя есть KafkaMessageListenerContainer
Например, тогда это очень легко использовать org.springframework.kafka.test.utils.ContainerTestUtils.waitForAssignment(Object container, int partitions)
,
https://docs.spring.io/spring-kafka/api/org/springframework/kafka/test/utils/ContainerTestUtils.html
например, звонок ContainerTestUtils.waitForAssignment(container, 1);
в вашей тестовой настройке будет блокироваться, пока контейнеру не будет назначен 1 раздел.
Итак, я только что прочитал о @PostConstruct
и оказывается, что вы можете легко использовать это также в тесте:
@PostConstruct
public void checkApplicationReady() {
applicationReady = true;
}
Теперь я добавил @Before
метод ожидания, пока этот флаг не будет установлен в true.
Пока что это работает очень хорошо!