【问题标题】:Calling [asyncError()] is not valid for a request with Async state [MUST_DISPATCH]调用 [asyncError()] 对具有异步状态 [MUST_DISPATCH] 的请求无效
【发布时间】:2019-05-05 10:08:33
【问题描述】:

环境:
案例 1
客户端:springboot(1.5.12.RELEASE) + spring-boot-admin-starter-client 1.5.7

管理员:springboot(2.1.1.RELEASE) + spring-boot-admin-starter-server 2.1.1

当我运行客户端并刷新管理应用程序时。错误是“调用 [asyncError()] 对于具有异步状态 [MUST_DISPATCH] 的请求无效”;

案例2
(2.1.1.发布) 客户端和服务端使用的版本相同,报错也一样。

详细错误如下:

2018-12-04 11:10:40.129 ERROR 2572 --- [nio-9090-exec-5] o.a.catalina.connector.CoyoteAdapter     : Exception while processing an asynchronous request

java.lang.IllegalStateException: Calling [asyncError()] is not valid for a request with Async state [MUST_DISPATCH]
    at org.apache.coyote.AsyncStateMachine.asyncError(AsyncStateMachine.java:440) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
    at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:512) [tomcat-embed-core-9.0.13.jar:9.0.13]
    at org.apache.coyote.Request.action(Request.java:430) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
    at org.apache.catalina.core.AsyncContextImpl.setErrorState(AsyncContextImpl.java:382) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
    at org.apache.catalina.connector.CoyoteAdapter.asyncDispatch(CoyoteAdapter.java:239) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
    at org.apache.coyote.AbstractProcessor.dispatch(AbstractProcessor.java:241) [tomcat-embed-core-9.0.13.jar:9.0.13]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:53) [tomcat-embed-core-9.0.13.jar:9.0.13]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791) [tomcat-embed-core-9.0.13.jar:9.0.13]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417) [tomcat-embed-core-9.0.13.jar:9.0.13]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.13.jar:9.0.13]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_162]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_162]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.13.jar:9.0.13]
    at java.lang.Thread.run(Unknown Source) [na:1.8.0_162]

【问题讨论】:

  • 我遇到了类似的问题。我将 SBA 和 Eureka Admin Server 结合在一个春季服务中。一切正常后,当客户向 Eureka 注册时,它也会显示在 SBA 中,但抛出完全相同的异常,我不知道为什么。

标签: spring-boot spring-boot-admin


【解决方案1】:

SBA-UI 正在使用一些长轮询,当浏览器关闭连接并且服务器尝试在其上写入一些数据时,会记录上述异常。这一切都很正常。它不应该影响应用程序。 更多信息:https://github.com/spring-projects/spring-boot/issues/15057

【讨论】:

    【解决方案2】:

    其实有一个简单的解决方案:不要使用 Tomcat servlet 容器,而是在响应式设置中运行管理服务器,例如:

    @SpringBootApplication
    @EnableAdminServer
    public class AdminServer {
        public static void main(String[] args) {
            new SpringApplicationBuilder(AdminServer.class)
            .web(WebApplicationType.REACTIVE)
            .run(args);
        }
    }
    

    这样我不会得到任何错误。

    【讨论】:

    • 如果我在类路径中有弹簧安全性,这不起作用
    【解决方案3】:

    尝试打开 JETTY,它对我有帮助。

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <groupId>org.springframework.boot</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>
    

    【讨论】:

    • 不清楚代码与你的答案有什么关系。
    • 我的意思是,作为使用响应式设置的替代方案,您可以使用 JETTY 容器。
    • 这对我有用。我仍然很好奇tomcat有什么问题。
    • 我为什么要这样做
    【解决方案4】:

    正如https://github.com/codecentric/spring-boot-admin/issues/1039#issuecomment-562910061 上发布的那样,您只需要像这样(在您的 pom.xml 中)更改 tomcat 的版本:

        <properties>
            <tomcat.version>9.0.54</tomcat.version>
        </properties>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-31
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多