不知道你具体RMI的实现方式。可以考虑学习数据库连接池的做法,建议调整:
如果发现Socket已经断开,则重新创建连接(重建RMI代理),然后再进行重试。
如果重试又立即失败,则才算真的失败。

解决方案 »

  1.   

    ServerA 访问 ServerB 失败后是如何处理的,比如LZ所述发生了异常,ServerA是怎么对应的,是直接抛出异常?还是retry?还是
      

  2.   

    可能一情况是,A到B有通信连接,B重起了,但A还是用原来的连接通信,所以报错。
    可以用try catch捕获,当连接断开,就重新建立连接。建立连接超时可以给出提示。
      

  3.   

    访问失败后,会跑出异常,但是我重启serverB后会ServerA会重新以同样的端口去call serverB
      

  4.   

    我是用RMI的方式(TestRemote s = (TestRemote) Naming.lookup("rmi://10.39.101.70:1099/server");)serverB重启后,serverB会重新注册服务(Naming.rebind("rmi://localhost:1099/server", testRemote);),这个时候serverA去重新lookup难道还是用的原来之前的通道吗,要怎么重新创建通道呢
      

  5.   

    怎么利用RMI的方式重新创建通道呢
      

  6.   


    如果发生异常,重新初始化Context,重做lookup。也就是完整的重来一次。
      

  7.   

    非常感谢大家的踊跃解答,问题解决了,其实每次重新lookup的时候都会重新初始化context,是我在之前lookup的时候把lookup到的对象放到缓存中了,下次直接从缓存中拿的,现在我每次重新得一次,不到缓存里面去取就ok了
      

  8.   

    请问楼主你的RMI是怎么集群的!最近急需,希望楼主能告知一下!