微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java RMI:如何检测服务器是否崩溃?

如何解决Java RMI:如何检测服务器是否崩溃?

| 我有一个第三方Java库,我正在尝试用RMI封装在单独的JVM中(因为该库具有使JVM崩溃的本机调用,并且有用于在另一台计算机上运行RMI服务器的应用程序)。 至少在所有内容都在同一台计算机上运行时,客户端上的Java应用程序都是这样工作的: 在RMI注册表中找到绑定到“ 0”的对象 如果它已经绑定到注册表,请使用它并转到步骤5。 否则,请启动一个单独的JVM来创建有问题的对象。 等待短暂的超时 在RMI注册表中找到绑定到“ 0”的对象 如果我们有目标,那就成功! (否则失败) 我的问题是,当另一个JVM崩溃时,似乎将绑定保留在RMI注册表中,然后我最终使用了一个未连接的幻像对象。 有没有办法在步骤2中以某种方式检查绑定到RMI注册表的代理对象,因此,如果该对象无效,我可以创建一个新对象来将rebind()绑定到RMI注册表?     

解决方法

为您的rmi请求设置超时(请参见此处)。如果请求超时,则认为该对象已死。另外,当我想要非常可靠的rmi代码时,我将使用某种重试/退避功能将rmi调用包装在客户端(假设您的传出呼叫是幂等的)。因此,在考虑目标对象失效之前,您应尝试进行几次连接,并之间进行延迟。 (没有,没有尝试联系它就无法确定远程对象是否死亡的方法)。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。