SpringKafka:如何知道什么时候准备好

6jjcrrmo  于 2021-06-06  发布在  Kafka
关注(0)|答案(2)|浏览(386)

我有一个简单的spring启动应用程序,它从kafka读取数据并写入kafka。我写了一封信 SpringBootTest 使用 EmbeddedKafka 来检验这一切。
主要问题是:有时测试失败是因为测试过早地发送了kafka消息。这样,消息就已经在spring应用程序(或其 KafkaListener 准确地说)已经准备好了。因为监听器从 latest 偏移量(我不想为我的测试更改任何配置-除了bootstrap.servers),它不会接收该测试中的所有消息。
有人知道我怎么能在考试中知道 KafkaListener 准备好接收消息了吗?
我唯一能想到的就是等到 /health 但我不知道这是否意味着 KafkaListener 准备好了。
非常感谢您的帮助!
致以最诚挚的问候。

cqoc49vn

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个分区。

xdyibdwo

xdyibdwo2#

所以,我刚读到 @PostConstruct 事实证明,你也可以很容易地在测试中使用它:

@PostConstruct
public void checkApplicationReady() {
    applicationReady = true;
}

现在我加了一个 @Before 方法等待该标志设置为true。
到目前为止,这似乎工作得很好!

相关问题