Проблема с подключением к Springboot 2.2.11 websocket

#java #spring #spring-boot #websocket

#java #весна #весенняя загрузка #websocket

Вопрос:

После того, как я обновил spring boot с 2.2.10 до 2.2.11, я всегда получаю исключение ConnectionLostException, если я пытаюсь подключить своего клиента.

Вот часть моего тестового класса:

     @BeforeEach()
    public void setup() throws InterruptedException, ExecutionException, TimeoutException {
      URL = "ws://localhost:"   port   "/notifications";
      WebSocketStompClient stompClient = new WebSocketStompClient(new 
      SockJsClient(createTransportClient()));
      stompClient.setMessageConverter(new SimpleMessageConverter());

      stompSession = stompClient.connect(URL, new StompSessionHandlerAdapter() {
      }).get(3, SECONDS);
   }
 

И вот трассировка стека:

 java.util.concurrent.ExecutionException: org.springframework.messaging.simp.stomp.ConnectionLostException: Connection closed

at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:205)
at org.springframework.util.concurrent.SettableListenableFuture.get(SettableListenableFuture.java:134)
at de.psb_gmbh.selektron.apigateway.NotificationControllerTest.setup(NotificationControllerTest.java:54)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)
Caused by: org.springframework.messaging.simp.stomp.ConnectionLostException: Connection closed
at org.springframework.messaging.simp.stomp.DefaultStompSession.afterConnectionClosed(DefaultStompSession.java:518)
at org.springframework.web.socket.messaging.WebSocketStompClient$WebSocketTcpConnectionHandlerAdapter.afterConnectionClosed(WebSocketStompClient.java:352)
at org.springframework.web.socket.handler.WebSocketHandlerDecorator.afterConnectionClosed(WebSocketHandlerDecorator.java:85)
at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.afterConnectionClosed(LoggingWebSocketHandlerDecorator.java:72)
at org.springframework.web.socket.sockjs.client.AbstractClientSockJsSession.afterTransportClosed(AbstractClientSockJsSession.java:350)
at org.springframework.web.socket.sockjs.client.WebSocketTransport$ClientSockJsWebSocketHandler.afterConnectionClosed(WebSocketTransport.java:173)
at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.onClose(StandardWebSocketHandlerAdapter.java:145)
at org.apache.tomcat.websocket.WsSession.fireEndpointOnClose(WsSession.java:556)
at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:502)
at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:460)
at org.apache.tomcat.websocket.WsSession.close(WsSession.java:447)
at org.springframework.web.socket.adapter.standard.StandardWebSocketSession.closeInternal(StandardWebSocketSession.java:235)
at org.springframework.web.socket.adapter.AbstractWebSocketSession.close(AbstractWebSocketSession.java:142)
at org.springframework.web.socket.sockjs.client.WebSocketClientSockJsSession.disconnect(WebSocketClientSockJsSession.java:127)
at org.springframework.web.socket.sockjs.client.AbstractClientSockJsSession.closeInternal(AbstractClientSockJsSession.java:213)
at org.springframework.web.socket.sockjs.client.AbstractClientSockJsSession.silentClose(AbstractClientSockJsSession.java:190)
at org.springframework.web.socket.sockjs.client.AbstractClientSockJsSession.handleCloseFrame(AbstractClientSockJsSession.java:322)
at org.springframework.web.socket.sockjs.client.AbstractClientSockJsSession.handleFrame(AbstractClientSockJsSession.java:233)
at org.springframework.web.socket.sockjs.client.WebSocketTransport$ClientSockJsWebSocketHandler.handleTextMessage(WebSocketTransport.java:163)
at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43)
at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:114)
at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.access$000(StandardWebSocketHandlerAdapter.java:43)
at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:85)
at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:82)
at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:402)
at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:502)
at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:301)
at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:133)
at org.apache.tomcat.websocket.WsFrameClient.processSocketRead(WsFrameClient.java:95)
at org.apache.tomcat.websocket.WsFrameClient.resumeProcessing(WsFrameClient.java:212)
at org.apache.tomcat.websocket.WsFrameClient.access$500(WsFrameClient.java:31)
at org.apache.tomcat.websocket.WsFrameClient$WsFrameClientCompletionHandler.doResumeProcessing(WsFrameClient.java:189)
at org.apache.tomcat.websocket.WsFrameClient$WsFrameClientCompletionHandler.completed(WsFrameClient.java:163)
at org.apache.tomcat.websocket.WsFrameClient$WsFrameClientCompletionHandler.completed(WsFrameClient.java:148)
at java.base/sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:127)
at java.base/sun.nio.ch.Invoker$2.run(Invoker.java:219)
at java.base/sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
 

И опять же, единственное, что я изменил, это обновить spring boot до версии 2.2.11.
Я не нашел ничего, что в spring boot 2.2.11 изменило обработку websocket.

РЕДАКТИРОВАТЬ: если я запускаю свое веб-приложение angular, я получаю следующее сообщение в консоли:

Сбой подключения WebSocket к ‘ws: // localhost: 4200 /sockjs-node /589 / savha4qo / websocket’: WebSocket закрывается до установления соединения.

EDIT2: код состояния равен 1002

РЕДАКТИРОВАНИЕ 3: Проблема в том, что я также использую org.springframework.cloud из spring-cloud-starter-sleuth. Если я удалю его, все будет работать нормально. Но мне это тоже нужно.

Комментарии:

1. попробуйте исключить ненужные библиотеки из зависимости проекта, как вы упомянули в редактировании, это сработает. для mvn maven.apache.org/guides/introduction/… или gradle docs.gradle.org/current/userguide /…