当前位置: 首页 > 知识库问答 >
问题:

当无法连接到Kafka时强制Spring Boot应用程序失败

鞠乐
2023-03-14

我想让我的 Spring 启动应用程序在启动时失败,如果它无法连接到 kafka 代理。我的应用程序仅向主题发布消息。我将这一行添加到我的属性文件中,但到目前为止没有运气spring.kafka.admin.fail-fast=true

共有2个答案

梁丘权
2023-03-14

快速失败只有在上下文中至少有一个NewTopicbean时才会起作用(因此管理员将尝试检查主题是否存在,如果不存在则创建它)。

@SpringBootApplication
public class So55177700Application {

    public static void main(String[] args) {
        SpringApplication.run(So55177700Application.class, args);
    }

    @Bean
    public NewTopic topic() {
        return new NewTopic("so55177700", 1, (short) 1);
    }

}

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-03-15 09:42:49.555 ERROR 41793 --- [           main] o.s.boot.SpringApplication               : Application run failed

java.lang.IllegalStateException: Could not configure topics
霍永年
2023-03-14

关于如何加速快速失败的补充

TL;Spring Boot博士2.4.5自动配置不允许您使用环境参数加速故障快速。将此添加到您的@Configuration以获得10秒超时:

@Bean
public KafkaAdmin kafkaAdmin(@Autowired KafkaProperties properties) {
    KafkaAdmin kafkaAdmin = new KafkaAdmin(properties.buildAdminProperties());
    kafkaAdmin.setFatalIfBrokerNotAvailable(properties.getAdmin().isFailFast());

    /* speed up fail fast */
    kafkaAdmin.setOperationTimeout(5);
    kafkaAdmin.setCloseTimeout(5);

    return kafkaAdmin;
}

更详细的答案

当<code>org.springframework.kafka.core类的<code>initialize()</code>方法时,会发生快速失败。执行KafkaAdmin。此方法可能会阻止:

  1. 如果发现新主题,它会阻止主题创建,最多操作超时
    1. 如果主题创建失败,它会阻止释放最多CloseTimeout
    2. 的资源

    默认情况下,这些值相应地为30秒和10秒(在上面提到的类中硬编码)。您可以使用set方法重新定义它们:set操作超时(int sec)setCloseTimeout(int sec)

    Spring的靴子呢?KafkaAdmin bean 是在 class org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration 中创建的。正如你可以猜到的,Spring Boot 根本没有设置超时:

    @Bean
    @ConditionalOnMissingBean
    public KafkaAdmin kafkaAdmin() {
        KafkaAdmin kafkaAdmin = new KafkaAdmin(this.properties.buildAdminProperties());
        kafkaAdmin.setFatalIfBrokerNotAvailable(this.properties.getAdmin().isFailFast());
        return kafkaAdmin;
    }
    

 类似资料:
  • 我试图将我的spring应用程序连接到debezium/kafka:0.10,但没有成功。最初应用程序使用Wurstmeister/kafka图像,但现在我引入了debezium的一个新功能,并且希望两者只使用一个kafka图像。我不能把应用程序连接到debezium kafka或debezium连接到wurstmeister kafka。有人知道这两个图像是否都可以使用一个图像?欢迎任何想法:)

  • 尝试使用主连接字符串和用户名(数据库名)连接到cosmosdb Mongo API 原因:com.mongodb.mongotieoutexception:在等待与com.mongodb.client.internal.mongoclientdelegate$1@3C291AAD匹配的服务器时,在30000 ms后超时。群集状态的客户端视图是{type=replica_set,servers=[{

  • 我生成了一个。我的SpringMVC Maven Hibernate MySQL应用程序的war文件,该应用程序在本地主机和本地MySQL数据库上运行良好。我配置数据库的方式是通过WebAppConfig。查看应用程序的java文件。属性文件并检索适当的信息。 然后我创建了一个OpenShift帐户并部署了它。war文件。我添加了MySQL和PHPMyAdmin盒带,以便维护数据库。当我试图通过我

  • 我有一个应用类 我有控制器课 并且,我想为Application test编写一个测试用例,以确保创建的实例类型为HelloController 但是,我在自动连接 hello控制器变量时遇到错误(找不到 hello 控制器类型的 bean)。根据我的理解,@SpringBootTest应该创建上下文并返回一个实例。我们不需要编写任何上下文 xml 或使用任何注释Config 类来获取实例。缺少了

  • 喂,伙计们! 这是我的第一次,所以我会尽力做到最好。 我想创建一个应用程序,它是运行与Springboot框架,我想把它连接到一个docker容器嵌入MySQL(但Spring启动应用程序不是运行在docker) 所以我一直关注这个帖子 我已经做了我的docker-comact: 我用这个命令运行它: 一切都很好,所以现在我在Spring靴上改变application.properties: 但当

  • 我有一个 Spring 引导项目,其中我使用 spring-boot-starter-actuator 和 io.dropwizard.metrics。 它生成我可以使用 url http://myapplication/metrics 访问的指标。我将应用程序部署在 Wildfly 10 独立服务器上。 我想使用jmx读取jconsole上的指标。我将应用程序配置为使用JMXReporter发送