`
fengchong719
  • 浏览: 82868 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring RMI 超时(Timeout) 和 自动重连

阅读更多
其实Spring RMI 提供自动重连,这样的话,如果服务端的程序重启,就不会影响到客户端.
而且大家应该知道,Spring 在容器启动的时候,就实例化所有BEAN,所以提醒大家,如果不一定用到,或者可以等下加载的,可以设置为延时加载的。
对于Spring RMI的实现我就不多说了,如果不知道的请看:
http://feng-henry.iteye.com/blog/1090339
下面是具体实现。
/**
 * 自定一个SCOKECT连接,可配置超时时间
 * @author Henry
 */
public class RMICustomClientSocketFactory implements RMIClientSocketFactory {
    
    
    private int timeout;
    
    /**
     * 设置超时时间
     * @param timeout
     */
    public void setTimeout(int timeout) {
        this.timeout = timeout;
    }

    public Socket createSocket(String host, int port) throws IOException {
        Socket socket = new Socket(host, port);
        socket.setSoTimeout(timeout);
        return socket;
    }

}

Spring配置文件如下:
<bean id="rmiClientSocketFactory" class="com.rmi.RMICustomClientSocketFactory">
		<property name="timeout" value="5000"></property>
	</bean>
<bean id="rmiService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">  
        <property name="serviceUrl" value="rmi://127.0.0.1:10999/Demo"></property>  
        <property name="serviceInterface" value="com.demo.IDemoRMIServer"></property>  
		<!-- setting refresh connect -->
		<property name="refreshStubOnConnectFailure" value="true"></property>
		<property name="lookupStubOnStartup" value="false"></property>
		<property name="registryClientSocketFactory" ref="rmiClientSocketFactory"></property>
	</bean>


lookupStubOnStartup : 这个属性是表示,不在容器启动的时候创建与Server端的连接;
refreshStubOnConnectFailure : 这个属性是表示是否连接出错时自动重连;
registryClientSocketFactory : 这个是客户端与服务端创建SOCKECT的一个工厂。
它只需要是实现RMIClientSocketFactory 接口的类就行。
RMIClientSocketFactory 的 原码如下:
public interface RMIClientSocketFactory {

    /**
     * Create a client socket connected to the specified host and port.
     * @param  host   the host name
     * @param  port   the port number
     * @return a socket connected to the specified host and port.
     * @exception IOException if an I/O error occurs during socket creation
     * @since 1.2
     */
    public Socket createSocket(String host, int port)
	throws IOException;
}

当然以上这些属性都在RmiProxyFactoryBean的超类 RmiClientInterceptor 里。这个源码太长,大家如果想深入了解,可以阅读此类源码。
分享到:
评论
3 楼 fengchong719 2012-02-28  
iamct 写道
你好 试过这个方法 但是好像一直存在问题  超时的情况与我设置的时间不一致
比较郁闷

你把你的代码实现给我看看。
2 楼 iamct 2011-11-20  
你好 试过这个方法 但是好像一直存在问题  超时的情况与我设置的时间不一致
比较郁闷
1 楼 yazh2636 2011-10-29  
正好用到,感谢分享

相关推荐

    Spring RMI

    在Spring Boot应用中,可以通过配置文件(application.properties或application.yml)设置RMI端口和服务,自动暴露RMI接口。 ### 7. 示例代码 创建远程接口: ```java public interface MyRemoteService extends ...

    Spring RMI小例子

    Spring RMI(Remote Method Invocation)是Java平台上的远程方法调用技术,结合Spring框架,能够帮助开发者轻松地创建分布式应用程序。在这个"Spring RMI小例子"中,我们将深入理解Spring如何简化RMI的使用,以及...

    SpringRMI小例子

    在这个"SpringRMI小例子"中,我们将深入探讨如何利用Spring框架来增强RMI的功能,使其更加灵活和易于管理。 首先,我们需要理解Spring框架在RMI中的角色。Spring提供了对RMI的高级抽象,通过其`org.springframework...

    spring RMI 服务(自动把service发布为RMI服务)

    总结来说,Spring RMI服务通过Spring的IoC和AOP特性简化了RMI服务的实现,同时提供了自动化发布服务的能力。开发者只需要定义服务接口和实现,Spring会负责服务的注册、暴露和管理。这种方式使得分布式系统的构建...

    spring rmi应用

    在实际应用中,Spring RMI提供了许多优势,如自动异常处理、透明的事务支持、线程管理等。同时,它还能与其他Spring特性如AOP结合,实现如日志、性能监控等功能。 然而,需要注意的是,虽然Spring RMI简化了远程...

    spring rmi 小例子

    在本示例中,我们将探讨如何使用Spring RMI创建一个小的应用程序,这通常涉及到服务器端(服务提供者)和客户端(服务消费者)的设置。 首先,让我们了解Spring RMI的核心概念: 1. **接口定义**:在RMI中,我们...

    spring rmi 改造

    本文将深入探讨"spring rmi 改造"这一主题,主要关注如何在原有的Spring RMI实现上进行优化,加入线程池控制以提高系统性能和资源利用率。 首先,让我们理解Spring RMI的基本概念。Spring RMI允许开发者利用Spring...

    spring RMI简单例子

    Spring RMI在此基础上提供了更高级别的抽象,通过Spring的依赖注入(DI)和AOP(面向切面编程)能力简化了服务的创建和调用。 要实现Spring RMI,我们需要以下组件: 1. **远程接口(Remote Interface)**:这是...

    spring和RMI分布式整合源码

    这个“spring和RMI分布式整合源码”可能包含了一个实际项目中如何将这两种技术融合的实例。现在,我们将深入探讨Spring框架和RMI,以及它们在分布式环境中的整合应用。 首先,Spring是一个开源的Java应用程序框架,...

    spring rmi 源码

    `RmiServiceExporter`会自动处理RMI注册和导出服务到RMI注册表的过程,只需要在配置文件中指定服务的bean名和接口类型。 服务端的配置文件(如`applicationContext.xml`)通常会包含如下内容: ```xml ...

    Spring-RMI.rar_spring rmi

    2.4 启动RMI服务器:运行包含上述配置的Spring上下文,服务将自动发布到RMI注册表。 三、创建Spring RMIClient 3.1 引入远程服务:在客户端项目中,同样需要定义远程接口,并确保客户端可以访问服务器端的接口。 ...

    spring rmi使用心得

    为了避免业务逻辑重新开发,顾使用spring rmi,把所有的bean作为rmi服务暴漏出来,在客户端只需要把项目依赖过来就ok,或者把以前的接口导入过来。 参考文档:...

    spring RMI 实用分享

    在本文中,我们将深入探讨Spring框架如何集成RMI,以及如何创建和使用RMI客户端。 首先,让我们了解RMI的基本概念。RMI是一种机制,它允许一个对象在一台计算机上执行的方法可以在另一台计算机上执行,就好像这些...

    Spring Rmi使用文档

    而 Spring RMI 大大简化了这些步骤,使得开发者可以通过简单的配置来创建 RMI 服务端和客户端。 #### 二、Spring RMI 的安装和使用 Spring 自 1.x 版本起就直接支持 RMI 功能,因此只需要包含 Spring 的 JAR 包...

    spring rmi 集成

    Spring框架提供了对RMI的支持,使得在Spring应用中集成RMI变得更加简单和灵活。本篇将深入探讨Spring如何与RMI结合,以及客户端和服务器端的实现细节。 ### 一、Spring RMI 服务器端集成 1. **定义远程接口**:...

    spring+rmi非本地实现

    总的来说,"spring+rmi非本地实现"项目展示了如何利用Spring和RMI来构建分布式服务,提供了一种跨越网络调用的方法,增强了系统的可扩展性和解耦性。理解和掌握这部分知识对于开发分布式系统具有重要意义。

    java项目使用spring rmi所涉及到的包

    在Java项目中,Spring RMI(Remote Method Invocation)是一种整合远程方法调用功能与Spring框架的方式,它使得在分布式环境中管理对象和服务变得更加便捷。本文将深入探讨Spring RMI涉及的包,以及如何在项目中使用...

    spring rmi 简单应用

    Spring RMI在此基础上增加了配置简化、依赖注入等特性,使得远程服务的创建和调用更加便捷。 首先,我们来理解一下Spring RMI的核心概念: 1. **远程接口(Remote Interface)**:这是定义远程方法的接口,通常...

    spring RMI 远程接口调用

    Spring RMI(Remote Method Invocation)远程接口调用是Spring框架提供的一个特性,它允许你在分布式环境中调用对象的方法,使得应用程序能够跨越网络边界操作远程对象。这个技术在大型企业级应用中尤其有用,因为它...

Global site tag (gtag.js) - Google Analytics