bestsource

[asyncError()] 호출이 비동기 상태 [MUST_DISPATCH]인 요청에 대해 유효하지 않습니다.

bestsource 2023. 9. 1. 21:12
반응형

[asyncError()] 호출이 비동기 상태 [MUST_DISPATCH]인 요청에 대해 유효하지 않습니다.

env:
사례 1:
클라이언트: springboot(1.5.12).릴리스) + spring-boot-admin-starter-client 1.5.7

admin: springboot(2.1.1).릴리스) + spring-boot-admin-starter-server 2.1.1

클라이언트를 실행하고 관리 앱을 새로 고칠 때.오류: "Async 상태 [MUST_DISPATCH]가 있는 요청에 대해 [asyncError()] 호출이 유효하지 않습니다.",

사례 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]

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>

SBA-UI에서 일부 긴 폴링을 사용하고 있는데 브라우저가 연결을 닫고 서버가 연결에 일부 데이터를 쓰려고 하면 위의 예외가 기록됩니다.이 모든 것은 꽤 정상적입니다.애플리케이션에 영향을 미치지 않아야 합니다.자세한 내용은 https://github.com/spring-projects/spring-boot/issues/15057 에서 확인할 수 있습니다.

실제로 간단한 해결책이 있습니다.Tomcat 서블릿 컨테이너를 사용하지 말고 다음과 같은 사후 대응 설정으로 관리 서버를 실행합니다.

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

이렇게 하면 오류가 발생하지 않습니다.

https://github.com/codecentric/spring-boot-admin/issues/1039#issuecomment-562910061, 게시된 것처럼 다음과 같이 Tomcat 버전을 변경하면 됩니다(pom.xml에서).

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

언급URL : https://stackoverflow.com/questions/53605197/calling-asyncerror-is-not-valid-for-a-request-with-async-state-must-dispatc

반응형