启动Spring Boot应用程序而不检查Kafka Server



我有一个应用程序,它在2.10.0版本中使用SpringBoot 2.10.0。Release和kafka。应用程序有一个简单的生产者和消费者:发送方使用KafkaTemplate,消费者使用Kafka Listener。我试图实现的是,即使KafkaServer没有运行,也能够启动SpringBoot应用程序。当前没有运行的KafkaBroker,应用程序无法启动,并显示以下错误消息:

org.springframework.context.ApplicationContextException: 
Failed to start bean 'org.springframework.kafka.config.internalKafkaListenerEndpointRegistry';
nested exception is org.apache.kafka.common.errors.TimeoutException

有没有办法做到这一点?如果有,有人能给我提示或关键字如何管理这一点吗?

当使用KafkaListener运行Spring Boot应用程序时,侦听器将默认尝试侦听Kafka。如果KafkaBroker无效或丢失,那么您将获得一个org.apache.kafka.common.KafkaException

您可以通过将autoStartup属性设置为false来更改容器工厂的默认行为。一种方法是将autoStartup = "false"元素添加到KafkaListener注释中:

@KafkaListener(topics = "some_topic", autoStartup = "false")
public void fooEventListener(){

现在,您的春季启动应用程序将启动。如果代理仍然关闭或无效,那么在尝试使用KafkaListener时仍然会遇到错误,但现在您可以在Java代码中处理错误,而不是Spring Boot服务器崩溃。

关于KafkaListner autoStartup元素的文档。

必须指出的是,您收到的错误(TimeoutException)并不是因为代理关闭,而是如果缓冲区已满,Kafka会抛出的错误。然后,批处理记录将从队列中删除,并且不会传递到代理。这个错误不会成为使用Kafka的应用程序无法启动的原因。

最新更新