Spring-RMI遠程接口調用簡單配置

遠程調用RMI(Remote Method Invocation): 經過使用RmiProxyFactoryBean 和 RmiServiceExporter,而且,Spring支持兩個傳統的RMI(使用 java.rmi.Remote接口和java.rmi.RemoteException)和經過RMI調用器實現的暴露遠程調用(支持任何Java接口)。java

RMI遠程訪問基本流程

    1). 服務端定義遠程訪問接口;spring

    2). 服務端經過RmiServiceExporter暴露服務接口緩存

    3). 客戶端定義與服務端已暴露的相同接口服務器

    4). 客戶端經過RmiProxyFactoryBean調用服務接口app

1.客戶端配置三步:ide

1)applicationContext.xml測試

 <!-- spring rmi遠程接口調用  客戶端調用-->
     <bean id="clientRmi" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
        <property name="serviceUrl" value="rmi://localhost:1199/userRmiService"></property> 
        <property name="serviceInterface" value="com.maystar.common.service.RmiUserService"></property> 
        <!-- 注意:若是以下兩項不配置,當服務器未開啓,客戶端沒法打包,會有拒絕鏈接異常。 -->
        <!-- 預查找遠程對象 默認爲true -->
        <property name="lookupStubOnStartup" value="false"></property>
        <!-- 是否刷新遠程調用緩存的stub -->
        <property name="refreshStubOnConnectFailure" value="true"></property>
    </bean>spa

2)接口:.net

public interface RmiUserService {
    User getUserByAcount(String name,String password);
    
    void insert(User user);
}xml

3)調用

//測試rmi遠程接口調用代碼
        System.out.println("rmi客戶端開始調用");
        RmiUserService rmiUserService=(RmiUserService)SpringContextUtil.getBean("clientRmi");
        User list=(User)rmiUserService.getUserByAcount("張三", ":張三的密碼");//spring實現反序列化
        System.out.println(list);
        System.out.println("rmi客戶端調用結束");

 

2.服務器端配置

1)applicationContext.xml

<!-- spring rmi遠程接口調用 服務端配置-->
    <bean name="rmiService" class="com.maystar.common.service.UserRmiServiceImpl"/>
    <bean  class="org.springframework.remoting.rmi.RmiServiceExporter">
       <!-- RMI服務名稱,可自定義服務名稱 -->
       <property name="serviceName" value="userRmiService" ></property>
        <!-- 導出實體 -->
       <property name="service" ref="rmiService" ></property>
       <property name="serviceInterface" value="com.maystar.common.service.RmiUserService"></property>
       <property name="registryPort" value="1199" ></property>
    </bean>

2)接口(同客戶端一致)

public interface RmiUserService {
    User getUserByAcount(String name,String password);
    
    void insert(User user);
}

3)接口實現類

public class UserRmiServiceImpl implements RmiUserService{
    @Override
    public User getUserByAcount(String name, String password) {
       System.out.println("服務端獲取用戶信息:" + name + password);
       User user=new User();
       user.setUsername(name);
       user.setPassword(password);
       return user;
    }
    @Override
    public void insert(User user) {
       System.out.println("開始插入用戶信息:" + user.toString());
    }
}

輸出結果:

rmi客戶端開始調用 張三 :張三的密碼 rmi客戶端調用結束

相關文章
相關標籤/搜索