Spring KafkaListener: как узнать, когда он будет готов - PullRequest
1 голос
/ 10 апреля 2019

У меня есть простое приложение Spring Boot, которое читает из Kafka и пишет в Kafka. Я написал SpringBootTest, используя EmbeddedKafka для проверки всего этого.

Основная проблема: иногда тест не проходит, потому что тест отправляет сообщение Kafka слишком рано. Таким образом, сообщение уже записано в Kafka до того, как приложение Spring (или, если быть точным, его KafkaListener) будет готово. Поскольку слушатель читает со смещения latest (я не хочу изменять какие-либо настройки для моего теста - кроме bootstrap.servers), он не получит все сообщения в этом тесте.

Кто-нибудь знает, как я мог узнать в тесте, что KafkaListener готов к приему сообщений?

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

Любая помощь очень ценится!

С уважением.

Ответы [ 2 ]

2 голосов
/ 12 апреля 2019

Если у вас есть экземпляр 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 раздел.

0 голосов
/ 10 апреля 2019

Итак, я только что прочитал о @PostConstruct, и оказалось, что вы можете легко использовать это также в тесте:

@PostConstruct
public void checkApplicationReady() {
    applicationReady = true;
}

Теперь я добавил @Before метод для ожидания, пока этот флаг не будет установлен в true.

Пока это работает очень хорошо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...