Java RMI – 客户端超时

我正在使用Java RMI构建分布式系统,它必须支持服务器丢失。

如果我的客户端使用RMI连接到服务器,如果此服务器出现故障(例如电缆问题),我的客户端应该获得exception,以便它可以连接到其他服务器。

但是当服务器出现故障时,我的客户端没有任何反应,他一直在等待回复。 如何为此设置超时?

对于套接字读取超时,您可以像这样设置自己的工厂,

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 ); } } ); 

我最近也遇到了这个问题,发现我需要设置以下Java属性,以便在客户端进行RMI调用超时:

 sun.rmi.transport.tcp.responseTimeout 

以下是Java新版本中这些参数的完整独家新闻:

您可以设置系统属性。
sun.rmi.transport.connectionTimeout类的sun.rmi.transport.connectionTimeout

它们在这里详述:
http://java.sun.com/j2se/1.4.2/docs/guide/rmi/sunrmiproperties.html