Java Spring Kafka-防止消费者在内置Spring引导期间连接Kafka主题

Java Spring Kafka-防止消费者在内置Spring引导期间连接Kafka主题,java,spring-boot,spring-kafka,Java,Spring Boot,Spring Kafka,我在容器工厂上执行了autoStartup(false),但不确定应该在哪里注入kafkafkalistenerendpointregistry 我不希望消费者在构建时连接。它应该在spring boot应用程序完全启动后连接Kafka主题。您应该在类中使用KafkaListener注释方法注入KafkaListenerEndpointRegistry,因为来自文档 为@KafkaListener注释创建的侦听器容器不是应用程序上下文中的bean。相反,它们是在KafkaListenerEndp

我在容器工厂上执行了
autoStartup(false)
,但不确定应该在哪里注入
kafkafkalistenerendpointregistry


我不希望消费者在构建时连接。它应该在spring boot应用程序完全启动后连接
Kafka
主题。

您应该在类中使用
KafkaListener
注释方法注入
KafkaListenerEndpointRegistry
,因为来自文档

为@KafkaListener注释创建的侦听器容器不是应用程序上下文中的bean。相反,它们是在KafkaListenerEndpointRegistry类型的基础结构bean中注册的

因此,通过使用这个
KafkaListenerEndpointRegistry
实例,您可以管理容器启动/停止的生命周期

例如:

@Autowired
private KafkaListenerEndpointRegistry registry;

   ...

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

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

请添加您在spring引导应用程序完全启动后尝试启动spring kafka consumer的示例代码,并希望放置这段代码,请尝试{log.info(“启动kafka侦听器容器”);kafkaListenerEndpointRegistry.start();}catch(异常e){log.info(启动kafka侦听器容器时出现异常:,e);}是的,您可以在
kafkaListener
方法中执行此操作,要获取
ListenerContainer
您应该拥有
kafkafkalistenerEndpointRegistry
实例,因此自动连线
Registry
将帮助您添加上述代码,但获取错误java.lang.IllegalStateException:另一个端点已向i注册d'myContainerId'java.lang.IllegalStateException:另一个端点已在org.springframework.util.Assert.state(Assert.java:73)~[spring-core-5.0.8.RELEASE.jar:5.0.8.RELEASE]org.springframework.kafka.config.kafkafkalistenerEndpointRegistry.Registry(KafkaListenerEndpointRegistry.Registry.Registry)上注册了id'myContainerListenerId'myContainerContainer~[spring-kafka-2.1.8.RELEASE.jar:2.1.8.RELEASE]
myContainerId
这是您的组id吗?请从
kafkafkalistener
注释中删除它,并更新完整的代码组id。@kafkaListener(id=“myContainerId”,topics=“${kafka.consumer.topic}”,groupid=“${kafka.consumer.group.id.config},containerFactory=“kafkaListenerContainerFactory”)public void接收(@Payload List customerMarketingAttributesRecords,acknowledge-acknowledge){try{kafkaListenerEndpointRegistry.getListenerContainer(“myContainerId”).start();