【发布时间】:2019-06-04 07:20:01
【问题描述】:
我正在使用 Spring Framework 的 WebSocketClient 和 WebSocketStompClient 来消费消息。设置如下所示:
WebSocketClient webSocketClient = new StandardWebSocketClient();
WebSocketStompClient stompClient = new WebSocketStompClient(webSocketClient);
//messageConverter is MappingJackson2MessageConverter
stompClient.setMessageConverter(messageConverter);
stompClient.setTaskScheduler(new ConcurrentTaskScheduler());
WebSocketHttpHeaders httpHeaders = new WebSocketHttpHeaders();
StompHeaders stompHeaders = new StompHeaders();
//... populate authentication headers ...
stompClient.connect(url, httpHeaders, stompHeaders, this);
类本身实现StompSessionHandlerAdapter。
然后我将重写 afterConnected() 方法以订阅所需的目的地,并且一切正常。
我也覆盖了handleException(),我期待可能会在出现连接错误时触发。我里面有一个警告日志,所以我希望它在发生连接错误时显示一些东西。
@Override
public void handleException(
StompSession session,
StompCommand command,
StompHeaders headers,
byte[] payload,
Throwable exception) {
logger.warn("Error on websocket session " + session.getSessionId(), exception);
}
但是,当连接断开时,我看不到任何错误。 websocket 服务器只能通过专用网络访问,所以我试图模拟它的方式是断开 VPN,此时消息停止(没有通过handleException() 记录异常)。重新连接 VPN 也不会自动恢复。
如何检测到 websocket 服务器不可用并定期尝试重新连接?
【问题讨论】:
-
当您尝试通过断开连接的套接字发送消息时,发送应该抛出一个 execption。尝试捕获此异常并重新连接套接字。
-
我没有发送任何消息,只是接收。
标签: java spring-boot websocket spring-websocket