Spring boot Spring应用程序未因超时异常而终止

Spring boot Spring应用程序未因超时异常而终止,spring-boot,spring-kafka,spring-cloud-stream,Spring Boot,Spring Kafka,Spring Cloud Stream,我已经创建了一个spring启动应用程序来将消息发布到Kafka队列。为此,我使用SpringCloudStream和Kafka活页夹作为依赖项。问题是,如果由于默认配置导致Kafka broker停机2分钟,我的应用程序将持续尝试连接到它。 我已经使用下面的属性减少了时间,并将其设置为1000毫秒并获得超时异常 spring.kafka.properties.request.timeout.ms:1000。 但是,我的spring应用程序仍然在异常之后运行。如果Kafka broker无法连接

我已经创建了一个spring启动应用程序来将消息发布到Kafka队列。为此,我使用SpringCloudStream和Kafka活页夹作为依赖项。问题是,如果由于默认配置导致Kafka broker停机2分钟,我的应用程序将持续尝试连接到它。 我已经使用下面的属性减少了时间,并将其设置为1000毫秒并获得超时异常
spring.kafka.properties.request.timeout.ms:1000
。 但是,我的spring应用程序仍然在异常之后运行。如果Kafka broker无法连接,我希望它失败。我为该
spring.kafka.admin.fail fast=true尝试了另一个属性,但应用程序仍在运行。
我还尝试搜索SpringCloudStream和Kafka binder的一些属性,如果Kafka broker不可用但找不到任何相关内容,我可以设置这些属性使我的应用程序失败。
请帮我做这个

请参阅下面的异常日志

Caused by: java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment.
        at org.apache.kafka.common.internals.KafkaFutureImpl.wrapAndThrow(KafkaFutureImpl.java:45)
        at org.apache.kafka.common.internals.KafkaFutureImpl.access$000(KafkaFutureImpl.java:32)
        at org.apache.kafka.common.internals.KafkaFutureImpl$SingleWaiter.await(KafkaFutureImpl.java:104)
        at org.apache.kafka.common.internals.KafkaFutureImpl.get(KafkaFutureImpl.java:274)
        at org.springframework.cloud.stream.binder.kafka.provisioning.KafkaTopicProvisioner.createTopicAndPartitions(KafkaTopicProvisioner.java:351)
        at org.springframework.cloud.stream.binder.kafka.provisioning.KafkaTopicProvisioner.createTopicIfNecessary(KafkaTopicProvisioner.java:325)
        at org.springframework.cloud.stream.binder.kafka.provisioning.KafkaTopicProvisioner.createTopic(KafkaTopicProvisioner.java:302)
        ... 33 common frames omitted
Caused by: org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment.
2019-05-22 06:06:25 [main] DEBUG o.s.c.s.DefaultLifecycleProcessor - Successfully started bean 'outputBindingLifecycle'
2019-05-22 06:06:25 [main] DEBUG o.s.c.s.DefaultLifecycleProcessor - Starting beans in phase 2147482647
2019-05-22 06:06:25 [main] DEBUG o.s.c.s.binding.BindableProxyFactory - Binding inputs for :interface kafka.stream.RXXXStreams
2019-05-22 06:06:25 [main] DEBUG o.s.c.s.DefaultLifecycleProcessor - Successfully started bean 'inputBindingLifecycle'
2019-05-22 06:06:25 [main] DEBUG o.s.c.s.DefaultLifecycleProcessor - Starting beans in phase 2147483547
2019-05-22 06:06:25 [main] DEBUG o.s.c.s.DefaultLifecycleProcessor - Successfully started bean 'org.springframework.kafka.config.internalKafkaListenerEndpointRegistry'
2019-05-22 06:06:25 [main] DEBUG o.s.b.a.l.ConditionEvaluationReportLoggingListener -

您是否有SpringBootWeb库作为依赖项?如果是这种情况,您的应用程序将不会退出。完整的日志也将非常有用

是否有spring boot web库作为依赖项?如果是这种情况,您的应用程序将不会退出。完整的日志也将非常有用

在应用程序启动时,如果kafka队列不可用,则它根本不会启动。但如果应用程序已经启动,并且在某个时间之后,如果队列关闭,则不会终止应用程序。即使您将应用程序捆绑为jar,它也会在内部使用嵌入式tomcat,它作为Web应用程序而不是独立程序运行。在我的情况下,Kafka队列在应用程序启动之前就关闭了,这就是我测试上述场景的方式。好的,在这种情况下,应用程序不应该启动。是否可以共享用于连接kafka队列的代码?我正在使用spring cloud stream属性。在应用程序启动时,相同
spring.cloud.stream.kafka.binder.brokers=${kafkaBrokers}spring.cloud.stream.bindings.output.destination=${kafkaTopicName}
的PSB,如果kafka队列不可用,则它将根本无法启动。但如果应用程序已经启动,并且在某个时间之后,如果队列关闭,则不会终止应用程序。即使您将应用程序捆绑为jar,它也会在内部使用嵌入式tomcat,它作为Web应用程序而不是独立程序运行。在我的情况下,Kafka队列在应用程序启动之前就关闭了,这就是我测试上述场景的方式。好的,在这种情况下,应用程序不应该启动。是否可以共享用于连接kafka队列的代码?我正在使用spring cloud stream属性。相同的PSB
spring.cloud.stream.kafka.binder.brokers=${kafkaBrokers}spring.cloud.stream.bindings.output.destination=${kafkaTopicName}
是的,我使用了测微计的web依赖项。但是,当出现一般异常(如spring的bean初始化异常)时,尽管我使用的是spring web依赖项,但我的应用程序成功结束。如果我是您,我将设置属性以禁用spring启动应用程序的web特性。尝试引用我正在使用属性
spring.main.web应用程序type=none
禁用web nature,但仍然没有任何进展。是的,我正在使用测微计的web依赖项。但是,当出现一般异常(如spring的bean初始化异常)时,尽管我使用的是spring web依赖项,但我的应用程序成功结束。如果我是您,我将设置属性以禁用spring启动应用程序的web特性。尝试引用我正在使用属性
spring.main.web应用程序type=none
禁用web特性,但仍然没有任何进展。