【问题标题】:Recurring AsyncRequestTimeoutException in Spring Boot Admin logSpring Boot 管理日志中重复出现 AsyncRequestTimeoutException
【发布时间】:2017-02-12 20:23:38
【问题描述】:

我目前正在本地机器上运行 Spring Boot Admin 以进行测试,并且我不断收到以下错误。应用程序本身似乎运行良好,但我的日志中充满了这些错误。我不知道为什么......

 org.springframework.web.context.request.async.AsyncRequestTimeoutException: null
    at org.springframework.web.context.request.async.TimeoutDeferredResultProcessingInterceptor.handleTimeout(TimeoutDeferredResultProcessingInterceptor.java:42) ~[spring-web-4.3.3.RELEASE.jar!/:4.3.3.RELEASE]
    at org.springframework.web.context.request.async.DeferredResultInterceptorChain.triggerAfterTimeout(DeferredResultInterceptorChain.java:75) ~[spring-web-4.3.3.RELEASE.jar!/:4.3.3.RELEASE]
    at org.springframework.web.context.request.async.WebAsyncManager$5.run(WebAsyncManager.java:392) ~[spring-web-4.3.3.RELEASE.jar!/:4.3.3.RELEASE]
    at org.springframework.web.context.request.async.StandardServletAsyncWebRequest.onTimeout(StandardServletAsyncWebRequest.java:143) ~[spring-web-4.3.3.RELEASE.jar!/:4.3.3.RELEASE]
    at org.apache.catalina.core.AsyncListenerWrapper.fireOnTimeout(AsyncListenerWrapper.java:44) ~[tomcat-embed-core-8.5.5.jar!/:8.5.5]
    at org.apache.catalina.core.AsyncContextImpl.timeout(AsyncContextImpl.java:131) ~[tomcat-embed-core-8.5.5.jar!/:8.5.5]
    at org.apache.catalina.connector.CoyoteAdapter.asyncDispatch(CoyoteAdapter.java:157) ~[tomcat-embed-core-8.5.5.jar!/:8.5.5]
    at org.apache.coyote.AbstractProcessor.dispatch(AbstractProcessor.java:228) [tomcat-embed-core-8.5.5.jar!/:8.5.5]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:53) [tomcat-embed-core-8.5.5.jar!/:8.5.5]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802) [tomcat-embed-core-8.5.5.jar!/:8.5.5]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410) [tomcat-embed-core-8.5.5.jar!/:8.5.5]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.5.jar!/:8.5.5]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_40]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_40]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.5.jar!/:8.5.5]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_40]

【问题讨论】:

标签: java spring spring-boot spring-boot-admin


【解决方案1】:

我也有类似的错误。在你的 application.yml 中试试这个属性

spring:
  mvc:
    async:
      request-timeout: -1  

【讨论】:

  • 嗨@VinodYadav,欢迎来到 Stack Overflow。我已经编辑了您的答案,将您的代码包装在代码标签中,以便于阅读。
  • 感谢@Vinod,效果很好。一个 repo 示例说明了这个问题 [github.com/dilbertside/compose-spring-boot-admin] 删除该属性并重新出现 AsyncRequestTimeoutException。
  • 当心将异步超时设置为 -1,其中一些类型的请求将保留在线程/套接字上,如果没有足够大,可能会导致资源不足。的请求。
  • 这就是所谓的“拯救世界”
【解决方案2】:

或者不用spring boot,添加

    @Override
    public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
        long timeout = 5 * 60 * 1000;// for example 5 minutes
        WebMvcConfigurer.super.configureAsyncSupport(configurer);
        configurer.setDefaultTimeout(timeout);
    }

到实现WebMvcConfigurer的配置类

【讨论】:

  • 也可以将超时时间声明为-1来取消超时
【解决方案3】:

如果使用ComplatebleFuture<Any>作为@RestController函数的返回类型并使用Tomcat作为后备容器。则需要将catalina连接器定制器注册到spring上下文中,这将调整异步连接超时。因为org.apache.catalina.connector.Connector 有自己的属性protected long asyncTimeout = 30000; 用作异步请求的超时时间。

@Configuration
class TomcatAsyncConfig {
    @Bean
    fun asyncTimeoutCustomize(): TomcatConnectorCustomizer =
        TomcatConnectorCustomizer { connector -> connector.asyncTimeout = 180000 }
}

修改值 spring.mvc.async.request-timeout: -1 server.tomcat.connection-timeout 不行。

【讨论】:

    【解决方案4】:

    您可以为特定订阅配置超时,而不是在应用程序级别配置超时。

        @GetMapping(value = "/subscription")
        public SseEmitter subscription() {
            SseEmitter emitter = new SseEmitter((long) (60000 * 5));
            return emitter;
        }
    

    所以在上面的摘录中,我给了这个特定的连接 5 分钟。其余连接仍将使用服务器默认超时。

    【讨论】:

      猜你喜欢
      • 2021-08-31
      • 1970-01-01
      • 2019-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      相关资源
      最近更新 更多