【发布时间】:2022-01-18 22:46:23
【问题描述】:
我在 spring boot 应用程序中有一个消费者,使用 spring kafka 库。我想为每个消费者线程设置租户上下文,即希望在每个线程创建后调用一个方法(创建时每个线程只调用一次)。目前,我已将它添加到在方法上有@KafkaListner 注释的listner 中,但它每次轮询并处理每条记录时都会调用它。我想在启动消费者线程时调用一次此方法。如果我们有这样的事情,请您帮帮我。
【问题讨论】:
-
您是否尝试过使用
KafkaListenerEndpointRegistry? docs.spring.io/spring-kafka/reference/html/… -
你有什么例子吗?我不确定我们该怎么做。
-
文档就是示例。如图所示,
@KafkaListener(id = "myContainer", topics = "...", autoStartup = "false"),这意味着您可以完全控制 何时 侦听器实际启动,您可以在应用程序的其他位置使用有线KafkaListenerEndpointRegistry实例来执行此操作。因此,无论您在何处调用其他方法,您都将通过该注册表启动侦听器。或者,只需在您的代码中存储一个静态AtomicBoolean来保护为每个 kafka 记录调用的方法,并在第一个使用的记录上调用该方法时将其设置为 true
标签: spring-boot apache-kafka kafka-consumer-api spring-kafka