spring - 在不检查 Kafka 服务器的情况下启动 Spring Boot 应用程序
问题描述
我有一个在 2.10.0 版本中使用 SpringBoot 2.10.0.Release 和 kafka 的应用程序。该应用程序有一个简单的生产者和消费者:发送者使用 KafkaTemplate,消费者使用 KafkaListener。我试图实现的是即使 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(){
现在您的 Spring Boot 应用程序将启动。如果代理仍然关闭或无效,您在尝试使用 KafkaListener 时仍然会收到错误,但您现在可以在 Java 代码中处理错误,而不是 Spring Boot 服务器崩溃。
关于 KafkaListner autoStartup 元素的文档。
必须提到的是,您收到的错误(TimeoutException)不是因为代理关闭,如果缓冲区已满,Kafka 会抛出此错误。然后,批次记录将从队列中删除,并且不会传递给代理。此错误不会是您使用 Kafka 的应用程序无法启动的原因。
推荐阅读
- java - 杰克逊如何解析也是日期值的文件
- php - php在嵌套数组中按键排序多维数组
- html - 将内容限制在绝对放置的容器中
- sitefinity - 如何保持短文本中的值“&”不变?
- python - 过多的内存使用 xarray `to_dataframe()`
- wordpress - Wordpress:安装失败:无法创建目录。'all-in-one-wp-migration' [即使使用 CHMOD 777]
- asp.net-core - 更新后重复行
- python - 我实现的合并排序不起作用
- android - 如何使用 Google 上的操作(Android 助手)创建 Android Intent?
- r - 如何使用 R 在语料库中搜索特定的 n-gram