【发布时间】:2022-09-24 16:04:11
【问题描述】:
在我在 Intellij 中运行的 Spring Boot 应用程序中,我有一个 @Scheduled 任务,并且两个 WebSocket 流使用来自两个不同 OkHttpClients 实例的 OkHttp 连接打开到两个不同的服务器。我认为 OkHttpClient.Builder 中的连接池设置与此处无关,因为 OkHttpClient 有两个实例。两个 websocket 流最初都接收一些事件,然后其中一个不再接收任何事件。我还通过打印工作线程的哈希码来验证它们是不同的。 [![图片][1]][1]
可悲的是,我在命令行 mvn run 上也注意到了同样的问题,所以它似乎不是 Intellij 特定的问题。
如何使两个套接字流上连续接收到的事件?如果我重用相同的 OkHttpClient 来创建两个连接,会有帮助吗?
更新:不想浪费时间等待解决这个问题,我采取了极端的步骤,将每个应用程序分成 2 个单独的应用程序,每个应用程序都有一个 websocket 侦听器。然而我面临同样的问题,其中一个在开始几秒钟后停止接收任何回调。不能把它归咎于远程服务器,因为如果我单独运行其中任何一个,它永远不会停止接收回调流。我需要它们同时启动并运行并相互通信。
fwiw,我正在使用 [this][2] 客户端库订阅一个 WebSocket 流,并使用 [this][3] 订阅另一个。第一个端点是 wss://stream.binance.com:9443/ws/btcusdt@aggTrade,第二个端点是 wss://fstream.binance.com。后一个订阅是通过向其发布 JSON {\"method\":\"SUBSCRIBE\",\"id\":1663348051361,\"params\":\"btcusdt@aggTrade\"} 来建立的。
我已经与服务器端点的客户支持聊天,他们无法帮助我,他们只是说如果我能够单独订阅套接字流就好了,他们看不出有任何理由当我同时提出它们时,它们应该停止工作。 [1]:https://i.stack.imgur.com/T5oia.png [2]:https://github.com/binance-exchange/binance-java-api/blob/master/src/main/java/com/binance/api/client/impl/BinanceApiWebSocketClientImpl.java#L47 [3]:https://github.com/Binance-docs/Binance_Futures_Java/blob/master/src/main/java/com/binance/client/impl/WebSocketStreamClientImpl.java#L63
标签: java spring-boot okhttp java-threads