次のシナリオがあります。同じアプリケーションを持ついくつかの Tomcat インスタンスが、起動時に相互に接続する必要があります。サーバー間の接続にはWebSocket(JSR-356)を利用しています。Tomcat が起動したら、別のサーバーで確立を開始する必要があります。
内部 WebSockets メカニズムが稼働していて、WebSockets の使用を開始できるようにするには、どうすれば最も正しく処理できますか?
アプリケーションはSpring 4に基づいています。
春の起動時にこの Execute メソッドを試しました、このHow to add a hook to the application context initialization event? このTomcat は、 spring を使用したスタートアップ イベントの後に実行されます。
これらのアプローチはすべてクールですが、その時点ではまだ WebSocket を使用する準備ができていないようです。次の例外がスローされます。
javax.websocket.DeploymentException: The HTTP request to initiate the WebSocket connection failed
at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:373)
at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:201)
at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:222)
...
Caused by: java.util.concurrent.TimeoutException
at sun.nio.ch.PendingFuture.get(PendingFuture.java:197)
at org.apache.tomcat.websocket.WsWebSocketContainer.processResponse(WsWebSocketContainer.java:599)
at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:343)
今のところ、回避策として、接続を確立する前に WebServlet の init() メソッドで 3 秒の遅延を使用しますが、回避したいハックです。
何か案は?ありがとう!