Весенние KafkaTestUtils: подождите, пока сообщение в теме не будет использовано

0

Вопрос

Итак, я столкнулся с интересной ситуацией:

В своем интеграционном тесте я отправляю данные в 2 темы, и они должны быть использованы приложением по заказу. Сначала - userTopic, затем следует использовать userOrderTopic.

Когда я отправляю свои сообщения в тестовом режиме, они отправляются очень быстро и в то же время. Но иногда порядок потребления по приложениям отличается. (Тема заказа пользователя, затем userTopic) что вообще нарушает мой тест.

Я нашел несколько триков, как я мог этого избежать - сон потока и т. Д. Но я считаю, что это плохое решение.

Я новичок в кафке, как и в случае с КафкаТестУлами. Есть ли какой-либо метод, который мог бы проверить, что сообщение в теме было израсходовано/проверить, пока это сообщение не было израсходовано?

Что - то вроде этого:

//check that message in userTopic was consumed, to have a chance send message to userOrderTopic 
KafkaTestUtils.waitUntilBeConsumed(serverBootstrap, "user-consumer", topic, 0, messageToUserTopic)

или

KafkaTestUtils.getNowConsumedMessage(serverBootstrap, "user-consumer", topic, 0)

P.S. в моем тесте интеграции у меня нет доступа к производителю/потребителю.

Или, может быть, в spring.kafka /spring.kafka.test есть еще один инструмент, чтобы сделать это должным образом?

1

Лучший ответ

0

KafkaTestUtils предназначен только для потребления от тестовых потребителей, а не от реальных потребителей приложений.

Простого решения для этого состояния гонки не существует; вам нужно дождаться, пока будет использована первая запись, прежде чем отправлять вторую.

2021-11-23 21:03:32

Итак, есть ли какой-нибудь способ проверить, что сообщение было отправлено? Чем похоже на нить.сон-неплохая идея
Gary Russell

Существует несколько различных методов, например: - если ваш слушатель вызывает службу, добавьте макет/заглушку этой службы в свой тестовый случай и дождитесь ее вызова; - добавьте RecordInterceptor на фабрику контейнеров прослушивателя в вашем тестовом случае и дождитесь вызова перехватчика; - добавьте прокси - сервер вокруг прослушивателя, который отсчитывает защелку в тестовом случае- см. stackoverflow.com/questions/53678801/... для примера.

спасибо за объяснение

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................