Встроенные сообщения обновления Kafka между тестами - PullRequest
0 голосов
/ 10 апреля 2019

Я использую Spring Kafka с аннотацией @EmbeddedKafka для запуска экземпляра Embedded kafka.

Зависимость:

<dependency>
  <groupId>org.springframework.kafka</groupId>
  <artifactId>spring-kafka-test</artifactId>
  <scope>test</scope>
</dependency>

И я настроил свое приложение для подключения к нему:

spring:
  kafka:
    bootstrap-servers: ${spring.embedded.kafka.brokers}

Я успешно отправляю сообщения и потребляю сообщения.

Моя проблема в том, что сообщения где-то сохраняются и могут появляться в последующих тестовых прогонах. И журналы печатают эти:

Successfully joined group with generation 117

Большое число поколений указывает, что Кафка между повторными тестами сохраняет информацию, которую я не хочу.

Как мне полностью очистить Embedded Kafka и начать все заново?

EDIT:

У меня была проблема с неправильным использованием Spring Profiles. У меня была собственная аннотация аннотации с моей встроенной конфигурацией Kafka. Проблема была в том, что я установил @ActiveProfiles("kafka") в составной аннотации, а также установил @ActiveProfiles("dev") в реальном классе тестирования. Я обновил составную аннотацию к этому:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
// @ActiveProfiles("kafka") REMOVED
@TestPropertySource(properties = "spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}")
@EmbeddedKafka(/* config properties */)
public @interface CustomEmbeddedKafka{
}

1 Ответ

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

Вам необходимо использовать @DirtiesContext для очистки контекста приложения между тестами.Вместе с этим встроенный брокер Kafka также будет уничтожен.

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

Вы также можете рассмотреть возможность использования @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD), но это приведет к некоторому снижению производительности, поскольку контекст приложения вместе со встроенным Kafka будет воссоздан перед каждым методом тестирования.

ОБНОВЛЕНИЕ

Попробуйте это предложение вместо application.properties модификации:

static {
    System.setProperty(EmbeddedKafkaBroker.BROKER_LIST_PROPERTY,
            "spring.kafka.bootstrap-servers");
}

См. https://docs.spring.io/spring-kafka/docs/2.2.5.RELEASE/reference/#kafka-testing-embeddedkafka-annotation

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