Stomp 会话处理程序:一旦建立连接,处理程序就不会在 afterConnected() 方法中得到通知

问题描述 投票:0回答:1

我正在尝试在 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) {

    }
}

在运行应用程序时,应该在连接的方法之后调用

java spring-boot websocket stomp spring-websocket
1个回答
0
投票

我面临同样的问题,我有一个没有解决方案给你:
https://github.com/spring-projects/spring-framework/issues/31021
引用:“其他客户端连接正常,只是升级后 Spring 客户端连接不正常。”也许他们会解决这个问题,评论才 6 小时。
希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.