Spring KafkaTestUtils:等待主题中的消息被消费

Spring KafkaTestUtils: wait until message in topic would be consumed

所以,我遇到了有趣的情况:

在我的集成测试中,我将数据发送到 2 个主题,它们应该按顺序由应用程序使用。首先 - userTopic,然后应该消费 userOrderTopic。

当我在测试中发送消息时,它同时发送得非常快。但有时,应用程序消费的顺序是不同的。 (userOrder 主题,然后是 userTopic)是什么破坏了我的测试。

我发现了一些技巧,如何避免它 - 线程休眠等。但我认为这是不好的解决方案。

我是 kafka 的新手,因此使用了 KafkaTestUtils。 有什么方法可以检查主题中的消息 consumed/check 直到该消息被消费?

像这样:

//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。在我的集成测试中,我没有访问 producer/consumer.

或者可能在 spring.kafka /spring.kafka.test 中还有其他工具可以以正确的方式进行吗?

KafkaTestUtils 仅用于从测试消费者而非真正的应用消费者消费。

对于这种竞争条件没有简单的解决方案;您需要等待第一个记录被消耗后再发送第二个。