我有一個應用程序,客戶端接收 SseEmitter,SseEmitter 會將 jms 消息中繼到客戶端??蛻舳岁P閉連接(關閉瀏覽器)時出現問題。將引發 IOException 導致以下無法捕獲的異常:2019-01-24 12:33:59.163 ERROR 26516 --- [nio-8080-exec-6] o.a.catalina.connector.CoyoteAdapter : Exception while processing an asynchronous requestjava.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.14.jar:9.0.14] at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:512) [tomcat-embed-core-9.0.14.jar:9.0.14] at org.apache.coyote.Request.action(Request.java:430) ~[tomcat-embed-core-9.0.14.jar:9.0.14] at org.apache.catalina.core.AsyncContextImpl.setErrorState(AsyncContextImpl.java:382) ~[tomcat-embed-core-9.0.14.jar:9.0.14]捕獲 IOException 不會阻止拋出此異常。我已經實現了一項工作,客戶端發送請求以從將發送事件的發射器集合中刪除他的發射器。但是,在客戶端/瀏覽器崩潰的情況下,仍然會拋出此異常。 @Scheduled(fixedDelay = 2000L) public void sendEvent() { TextMessage message = null; try { message = messageBlockingQueue.take(); } catch (InterruptedException e) { e.printStackTrace(); } for(SseEmitter sseEmitter:emitterMap.values()) { TextMessage finalMessage = message; try { sseEmitter.send(finalMessage.getText()); } catch (IOException e) { sseEmitter.completeWithError(e); } catch (JMSException e) { e.printStackTrace(); } } }
1 回答

鴻蒙傳說
TA貢獻1865條經驗 獲得超7個贊
經過進一步研究,這個異??梢詺w咎于tomcat中的一個錯誤。
https://github.com/spring-projects/spring-boot/issues/15057
為了解決這個問題,我從 tomcat 切換到了 jetty。
添加回答
舉報
0/150
提交
取消