我正在尝试在 Spring Boot 中与 stomp 会话处理程序建立 websocket 连接,但在建立连接后,它不被称为 afterConnected() 方法,我可以在控制台中看到“连接中”,但看不到“已连接”,几分钟后控制台打印“失败” in TransportConnection Closed”这是传输异常..我正在使用 Spring Websocket 客户端...
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.messaging.converter.MappingJackson2MessageConverter;
import org.springframework.messaging.simp.stomp.StompCommand;
import org.springframework.messaging.simp.stomp.StompHeaders;
import org.springframework.messaging.simp.stomp.StompSession;
import org.springframework.messaging.simp.stomp.StompSessionHandler;
import org.springframework.stereotype.Service;
import org.springframework.web.socket.client.WebSocketClient;
import org.springframework.web.socket.client.standard.StandardWebSocketClient;
import org.springframework.web.socket.messaging.WebSocketStompClient;
import java.lang.reflect.Type;
@Service
public class MyStompClient extends StompSessionHandlerAdapter {
@EventListener(value = ApplicationReadyEvent.class)
public void connect() {
System.out.println("In connection...");
WebSocketClient client = new StandardWebSocketClient();
WebSocketStompClient stompClient = new WebSocketStompClient(client);
stompClient.setMessageConverter(new MappingJackson2MessageConverter());
try {
StompSession stompSession = stompClient
.connectAsync("wss://ws.finnhub.io/?token=my_token", this)
.get();
System.out.println("connected");
} catch (Exception e) {
System.out.println("Failed" + e.getMessage());
}
}
@Override
public void afterConnected(StompSession session, StompHeaders connectedHeaders) {
System.out.println("After Connected Called");
}
@Override
public void handleException(StompSession session, StompCommand command, StompHeaders headers, byte[] payload, Throwable exception) {
System.out.println("in ex: " + exception.getMessage());
}
@Override
public void handleTransportError(StompSession session, Throwable exception) {
System.out.println("failed in transport" + exception.getMessage());
}
@Override
public Type getPayloadType(StompHeaders headers) {
return String.class;
}
@Override
public void handleFrame(StompHeaders headers, Object payload) {
}
}
在运行应用程序时,应该在连接的方法之后调用
我面临同样的问题,我有一个没有解决方案给你:
https://github.com/spring-projects/spring-framework/issues/31021
引用:“其他客户端连接正常,只是升级后 Spring 客户端连接不正常。”也许他们会解决这个问题,评论才 6 小时。
希望有帮助。