2

我已经更新了一个项目的库,特别是我已经将 Spring Boot 从版本 2.2.6 更新到了 2.3.2。

迁移文档中所述,这也意味着我的 Kafka 依赖项发生了变化,升级到 Spring Kafka 和 Kafka 2.5

但是,由于这种变化,我的一些测试“随机”失败,例如,当我执行所有测试时,我在其中一些测试中遇到了这种失败(但并不总是在相同的测试中):

java.lang.IllegalStateException: More than one record for topic found

来自这个特定的行:

KafkaTestUtils.getSingleRecord(consumer, topicConfiguration.getTopic(event))

文档中没有提及为什么会发生这种情况,也没有其他日志错误消息可以说明为什么会发生这种情况。由于我没有改变我的应用程序的逻辑,我是否在迁移过程中遗漏了一些东西?

如果我尝试这样的事情:

KafkaTestUtils.getRecords(consumer)
    .records(topicConfiguration.getTopic(event)).map { it }[0]

为了只得到第一个,以前工作的测试会IndexOutOfBoundsException因索引而失败。

4

1 回答 1

2

根据 Spring Kafka 库的测试文档,从 2.5 版开始,他们改变了配置消费者的方式。这是确切的报价:

从 2.5 版开始,该consumerProps方法ConsumerConfig.AUTO_OFFSET_RESET_CONFIGearliest. 这是因为,在大多数情况下,您希望消费者使用在测试用例中发送的任何消息。ConsumerConfig默认值latest意味着在消费者开始之前已经由测试发送的消息将不会收到这些记录。要恢复到以前的行为,请latest在调用方法后将属性设置为。

这很可能是所描述的测试错误的原因。

于 2020-08-17T12:45:59.737 回答