Java RMI - 客户端超时

2022-09-03 17:14:46

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

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

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


答案 1

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

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

答案 2

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

sun.rmi.transport.tcp.responseTimeout

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


推荐