package com.nq.ws; import com.nq.enums.EStockType; import com.nq.utils.PropertiesUtil; import lombok.extern.slf4j.Slf4j; import org.java_websocket.client.WebSocketClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.net.URI; import java.util.HashMap; import java.util.Map; @Slf4j @Configuration public class WebSocketClientBeanConfig { @Bean public Map websocketRunClientMap() { Map retMap = new HashMap<>(2); try { WebsocketRunClient websocketRunClient = new WebsocketRunClient( new URI(PropertiesUtil.getProperty("JS_IN_WS_URL")), EStockType.IN); websocketRunClient.connect(); websocketRunClient.setConnectionLostTimeout(0); retMap.put(EStockType.IN.getCode(), websocketRunClient); new Thread(() -> { while (!Thread.currentThread().isInterrupted()) { try { Thread.sleep(8000); if (!websocketRunClient.isOpen()) { log.warn("印度股票 websocket 未连接,尝试重连"); websocketRunClient.reconnectBlocking(); websocketRunClient.setConnectionLostTimeout(0); continue; } websocketRunClient.send("heartbeat".getBytes()); } catch (InterruptedException e) { Thread.currentThread().interrupt(); break; } catch (Exception e) { log.warn("印度股票 websocket 保活异常: {}", e.getMessage()); try { websocketRunClient.reconnectBlocking(); websocketRunClient.setConnectionLostTimeout(0); } catch (Exception reconnectEx) { log.warn("印度股票 websocket 重连失败: {}", reconnectEx.getMessage()); } } } }, "ws-in-keepalive").start(); } catch (Exception e) { log.error("印度股票 websocket 初始化失败", e); } return retMap; } }