如果我们使用KakaListener注释,是否可以获取ConcurrentMessageListenerContainer对象?

问题描述

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

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

有什么办法可以获取@kafkaListener批注在后台创建的ConcurrentMessageListenerContainer的句柄吗?我想以编程方式启动/停止容器,这是我的最终目标。 预先感谢

解决方法

请参见the documentation

@KafkaListener生命周期管理

为@KafkaListener注释创建的侦听器容器不是应用程序上下文中的bean。而是使用类型为KafkaListenerEndpointRegistry的基础结构bean注册它们。该bean由框架自动声明,并管理容器的生命周期。它将自动启动任何将autoStartup设置为true的容器。所有容器工厂创建的所有容器必须处于同一阶段。有关更多信息,请参见侦听器容器自动启动。您可以使用注册表以编程方式管理生命周期。启动或停止注册表将启动或停止所有已注册的容器。或者,您可以使用单个容器的id属性获得对单个容器的引用。您可以在注释上设置autoStartup,它会覆盖在容器工厂中配置的默认设置。您可以从应用程序上下文中获取对该bean的引用,例如自动装配,以管理其注册的容器。以下示例显示了如何执行此操作:

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

@Autowired
private KafkaListenerEndpointRegistry registry;

...

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

...

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...