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();