Calling [asyncError()] is not valid for a request

2020-08-10 07:31发布

问题:

env:
case 1:
client : springboot(1.5.12.RELEASE) + spring-boot-admin-starter-client 1.5.7

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

when i run client,and refresh admin app. the error is "Calling [asyncError()] is not valid for a request with Async state [MUST_DISPATCH]";

case2:
(2.1.1.RELEASE) Both the client and the server use the same version and have the same error.

Detailed errors are as follows:

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]

回答1:

Try to switch on JETTY, it has helped me.

<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>


回答2:

SBA-UI is using some long polling, when the browser closes the connection and the server tries to write some data on it the above exception is logged. All of it is quite normal. It shouldn't affect the application. For more infformation: https://github.com/spring-projects/spring-boot/issues/15057



回答3:

Actually there is a simple solution: Just don't use the Tomcat servlet container but run the admin server in a reactive setup, like:

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

This way I don't get any errors.