我有一个简单的spring启动应用程序,它从kafka读取数据并写入kafka。我写了一封信 SpringBootTest
使用 EmbeddedKafka
来检验这一切。
主要问题是:有时测试失败是因为测试过早地发送了kafka消息。这样,消息就已经在spring应用程序(或其 KafkaListener
准确地说)已经准备好了。因为监听器从 latest
偏移量(我不想为我的测试更改任何配置-除了bootstrap.servers),它不会接收该测试中的所有消息。
有人知道我怎么能在考试中知道 KafkaListener
准备好接收消息了吗?
我唯一能想到的就是等到 /health
但我不知道这是否意味着 KafkaListener
准备好了。
非常感谢您的帮助!
致以最诚挚的问候。
2条答案
按热度按时间cqoc49vn1#
如果你有
KafkaMessageListenerContainer
例如,那么它很容易使用org.springframework.kafka.test.utils.ContainerTestUtils.waitForAssignment(Object container, int partitions)
.https://docs.spring.io/spring-kafka/api/org/springframework/kafka/test/utils/containertestutils.html
e、 g.呼叫
ContainerTestUtils.waitForAssignment(container, 1);
在您的测试中,设置将阻止,直到容器分配了1个分区。xdyibdwo2#
所以,我刚读到
@PostConstruct
事实证明,你也可以很容易地在测试中使用它:现在我加了一个
@Before
方法等待该标志设置为true。到目前为止,这似乎工作得很好!