嵌入式Kafka刷新测试之间的消息

时间:2019-04-10 15:00:55

标签: spring apache-kafka spring-kafka spring-kafka-test

我正在使用带有+------------------------+ |mycol | +------------------------+ |12 PHTEXTURL PHTEXTEMAIL| |12 PHTEXTURL PHTEXTEMAIL| |12 PHTEXTURL PHTEXTEMAIL| |12 PHTEXTURL PHTEXTEMAIL| +------------------------+ 批注的Spring Kafka启动嵌入式kafka实例。

依赖性:

@EmbeddedKafka

我已经配置了我的应用程序以连接到它:

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

我成功发送了消息并使用了消息。

我的问题是消息保留在某处,并可能出现在进行的测试运行中。日志正在打印这些:

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

高代号表示Kafka正在保留我不希望的两次测试重试之间的信息。

如何彻底清理嵌入式Kafka并重新开始?

编辑:

我遇到的问题是我没有正确使用Spring Profiles。我的嵌入式Kafka配置中有一个自定义注释注释。问题是我在复合注释中设置了Successfully joined group with generation 117 ,并且在实际测试类中也设置了@ActiveProfiles("kafka")。我已经将复合注释更新为:

@ActiveProfiles("dev")

1 个答案:

答案 0 :(得分:1)

您需要在两次测试之间使用@DirtiesContext来清理应用程序上下文。嵌入式卡夫卡经纪人也将被销毁。

如果问题出在一个测试类方法之间,那么您需要重新考虑那里的逻辑,以免干扰不同方法中的相同主题。

您也可以考虑使用@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