相关疑难解决方法(0)

Spring Boot REST API - 请求超时?

我有一个Spring Boot REST服务,有时会将第三方服务作为请求的一部分.我想在我的所有资源上设置一个超时(让我们说5秒),这样如果任何请求处理(整个链,从传入到响应)花费的时间超过5秒,我的控制器会响应HTTP 503而不是实际响应.如果这只是一个Spring属性,例如设置,那将是非常棒的

spring.mvc.async.request-timeout=5000
Run Code Online (Sandbox Code Playgroud)

但我没有运气.我也尝试过扩展WebMvcConfigurationSupport并覆盖configureAsyncSupport:

@Override
public void configureAsyncSupport(final AsyncSupportConfigurer configurer) {
    configurer.setDefaultTimeout(5000);
    configurer.registerCallableInterceptors(timeoutInterceptor());
}

@Bean
public TimeoutCallableProcessingInterceptor timeoutInterceptor() {
    return new TimeoutCallableProcessingInterceptor();
}
Run Code Online (Sandbox Code Playgroud)

没有运气.

我怀疑我必须手动计算所有第三方呼叫的时间,如果它们花费的时间太长,则抛出超时异常.是对的吗?或者是否有涵盖我所有请求端点的更简单,整体的解决方案?

java rest spring timeout spring-boot

19
推荐指数
6
解决办法
6万
查看次数

在Spring Boot嵌入式Tomcat中配置maxKeepAliveRequests

我需要将Spring Boot Zuul网关中的maxKeepAliveRequests值修改为大于默认值100的值。注意到此值未在Spring Boot的公共属性列表中公开,所以我尝试通过@Configuration类设置该属性:

@Configuration
public class DefaultConfig {
    @Bean
    public EmbeddedServletContainerFactory servletContainerFactory() {
        TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();

        factory.addConnectorCustomizers(connector ->
                ((AbstractHttp11Protocol) connector.getProtocolHandler()).setMaxKeepAliveRequests(1000));

        return factory;
    }
}
Run Code Online (Sandbox Code Playgroud)

但这似乎并没有达到预期的效果。我是否有适当的方法来更改未通过Spring通用属性公开的Tomcat属性?

tomcat spring-boot

5
推荐指数
1
解决办法
5264
查看次数

标签 统计

spring-boot ×2

java ×1

rest ×1

spring ×1

timeout ×1

tomcat ×1