如果我们使用kakalistener注解,有没有办法获得concurrentmessagelistenercontainer对象?

ukdjmx9f  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(647)

我正在使用spring提供的@kafkalistener注解来创建kafka容器

@KafkaListener(topics = "#", group = "#", containerFactory = "myContainerFactory")
        public void listen(final ConsumerRecord<?, ?> message, Acknowledgment ack) {

有什么方法可以得到@kafkalistener注解在引擎盖下创建的concurrentmessagelistenercontainer的句柄吗?我想通过编程启动/停止容器,这是我的最终目标。提前谢谢

u3r8eeie

u3r8eeie1#

请参阅文档。
@kafkalistener生命周期管理
为@kafkalistener注解创建的侦听器容器不是应用程序上下文中的bean。相反,它们是用kafkalistenerendpointregistry类型的基础结构bean注册的。这个bean由框架自动声明并管理容器的生命周期;它将自动启动任何将autostartup设置为true的容器。所有容器工厂创建的所有容器必须处于同一阶段。有关详细信息,请参阅侦听器容器自动启动。您可以使用注册表以编程方式管理生命周期。启动或停止注册表将启动或停止所有已注册的容器。或者,可以通过使用单个容器的id属性来获取对该容器的引用。您可以在注解上设置autostartup,这将覆盖在容器工厂中配置的默认设置。您可以从应用程序上下文(如auto-wiring)获取对bean的引用,以管理其注册的容器。以下示例说明了如何执行此操作:

@KafkaListener(id = "myContainer", topics = "myTopic", autoStartup = "false")
public void listen(...) { ... }

@Autowired
private KafkaListenerEndpointRegistry registry;

...

    this.registry.getListenerContainer("myContainer").start();

...

相关问题