14

Java RMI を使用して分散システムを構築していますが、サーバーの損失をサポートする必要があります。

クライアントが RMI を使用してサーバーに接続されている場合、このサーバーがダウンした場合 (ケーブルの問題など)、クライアントは例外を取得して、他のサーバーに接続できるようにする必要があります。

しかし、サーバーがダウンしてもクライアントには何も起こらず、応答を待ち続けます。そのタイムアウトを設定するにはどうすればよいですか?

4

4 に答える 4

16

ソケット読み取りタイムアウトについては、次のように独自のファクトリを設定できます。

           RMISocketFactory.setSocketFactory( new RMISocketFactory()
            {
                public Socket createSocket( String host, int port )
                    throws IOException
                {
                    Socket socket = new Socket();
                    socket.setSoTimeout( timeoutMillis );
                    socket.setSoLinger( false, 0 );
                    socket.connect( new InetSocketAddress( host, port ), timeoutMillis );
                    return socket;
                }

                public ServerSocket createServerSocket( int port )
                    throws IOException
                {
                    return new ServerSocket( port );
                }
            } );
于 2009-11-30T22:12:03.000 に答える
13

私も最近この問題に遭遇し、RMI 呼び出しがクライアント側でタイムアウトになるようにするには、次の Java プロパティを設定する必要があることがわかりました。

sun.rmi.transport.tcp.responseTimeout

Java の新しいバージョンでのこれらのパラメーターの完全なスクープは次のとおりです。

于 2012-10-16T18:57:59.000 に答える
9

設定できるシステム プロパティがあります。
何かのようなものsun.rmi.transport.connectionTimeout

詳細はこちら:
https://docs.oracle.com/javase/7/docs/technotes/guides/rmi/sunrmiproperties.html

于 2009-11-30T22:04:23.440 に答える