Spring 从WebSocketStompClient设置默认心跳会导致异常

Spring 从WebSocketStompClient设置默认心跳会导致异常,spring,websocket,activemq,stomp,Spring,Websocket,Activemq,Stomp,我们试图使用WebSocketStompClient连接到使用SpringWebSocket实现的服务器 我们的客户机是使用Spring4.2.2开发的,在没有覆盖默认心跳的情况下工作得非常好 但是,我希望客户端以2秒的间隔发送心跳,因此修改客户端以设置默认心跳 WebSocketStompClient stompClient = new WebSocketStompClient(webSocketClient); ThreadPoolTaskScheduler taskSche

我们试图使用WebSocketStompClient连接到使用SpringWebSocket实现的服务器

我们的客户机是使用Spring4.2.2开发的,在没有覆盖默认心跳的情况下工作得非常好

但是,我希望客户端以2秒的间隔发送心跳,因此修改客户端以设置默认心跳

    WebSocketStompClient stompClient = new WebSocketStompClient(webSocketClient);
    ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
    taskScheduler.afterPropertiesSet();
    long heartbeat[] = {2000, 10000};
    stompClient.setDefaultHeartbeat(heartbeat);
    stompClient.setTaskScheduler(taskScheduler); // for heartbeats, receipts
    String url = "ws://localhost:8080/Notify/app";
    StompSessionHandler handler = new MyStompHandler();
    ListenableFuture<StompSession>session = stompClient.connect(url, handler, "localhost", "8080");
我们使用tyrus客户端1.10、spring websocket 4.2.2(用于websocket客户端)和ActiveMQ 5.11.1作为代理

我尝试设置不同的心跳值,但都会导致异常。 我不确定客户端手动指定心跳时会有什么不同

有人能帮忙吗


谢谢。

您找到解决方案了吗?(似乎我也有类似的问题)是的,不要指定hearbeat间隔,使用默认值。这是乒乓球的10分。这可能与运动有关。显然,
WebSocketStompClient
将这些心跳参数传递给一些
StompBrokerRelayMessageHandler
,后者通过
TcpConnection.onWriteInactivity(…)
对其进行调度。心跳似乎不是以固定的间隔发送的。
    Transport Error Connection closed
org.springframework.messaging.simp.stomp.ConnectionLostException: Connection closed
    at org.springframework.messaging.simp.stomp.DefaultStompSession.afterConnectionClosed(DefaultStompSession.java:459)
    at org.springframework.web.socket.messaging.WebSocketStompClient$WebSocketTcpConnectionHandlerAdapter.afterConnectionClosed(WebSocketStompClient.java:353)
    at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.onClose(StandardWebSocketHandlerAdapter.java:143)
    at org.glassfish.tyrus.core.TyrusEndpointWrapper.onClose(TyrusEndpointWrapper.java:1190)
    at org.glassfish.tyrus.core.TyrusWebSocket.onClose(TyrusWebSocket.java:126)
    at org.glassfish.tyrus.core.frame.CloseFrame.respond(CloseFrame.java:131)