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
仅用于从测试消费者而非真正的应用消费者消费。
对于这种竞争条件没有简单的解决方案;您需要等待第一个记录被消耗后再发送第二个。
所以,我遇到了有趣的情况:
在我的集成测试中,我将数据发送到 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
仅用于从测试消费者而非真正的应用消费者消费。
对于这种竞争条件没有简单的解决方案;您需要等待第一个记录被消耗后再发送第二个。