4

次のシナリオがあります。同じアプリケーションを持ついくつかの 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 秒の遅延を使用しますが、回避したいハックです。

何か案は?ありがとう!

4

1 に答える 1

3

接続確立を別のスレッドに設定するだけで解決しました。別のスレッドがないと、Tomcat の起動の続行がブロックされます。いつか誰かの役に立てば幸いです。

于 2014-07-03T11:10:34.700 に答える