【问题标题】:Run a method once after spring kafka consumer starts在 spring kafka 消费者启动后运行一次方法
【发布时间】:2022-01-18 22:46:23
【问题描述】:

我在 spring boot 应用程序中有一个消费者,使用 spring kafka 库。我想为每个消费者线程设置租户上下文,即希望在每个线程创建后调用一个方法(创建时每个线程只调用一次)。目前,我已将它添加到在方法上有@KafkaListner 注释的listner 中,但它每次轮询并处理每条记录时都会调用它。我想在启动消费者线程时调用一次此方法。如果我们有这样的事情,请您帮帮我。

【问题讨论】:

  • 您是否尝试过使用KafkaListenerEndpointRegistrydocs.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


【解决方案1】:

添加一个事件监听器来监听消费者启动的事件。它在同一个线程上调用(默认情况下)。

https://docs.spring.io/spring-kafka/docs/current/reference/html/#events

https://docs.spring.io/spring-kafka/docs/current/reference/html/#event-consumption

【讨论】:

  • 这个工作非常感谢
猜你喜欢
  • 2017-08-16
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
  • 2018-01-04
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
相关资源
最近更新 更多