如何解决如果我们使用KakaListener注释,是否可以获取ConcurrentMessageListenerContainer对象?
我正在使用spring提供的@kafkaListener注释来创建kafka容器
@KafkaListener(topics = "#",group = "#",containerFactory = "myContainerFactory")
public void listen(final ConsumerRecord<?,?> message,Acknowledgment ack) {
有什么办法可以获取@kafkaListener批注在后台创建的ConcurrentMessageListenerContainer的句柄吗?我想以编程方式启动/停止容器,这是我的最终目标。 预先感谢
解决方法
@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();
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。