1. 程式人生 > >rmi簡單用例,簡單有效

rmi簡單用例,簡單有效

虛擬機 客戶端 spring 配置文件 服務端

Java RMI 指的是遠程方法調用 (Remote Method Invocation)。它是一種機制,能夠讓在某個 Java 虛擬機上的對象調用另一個 Java 虛擬機中的對象上的方法。可以用此方法調用的任何對象必須實現該遠程接口。使用spring對RMI的支持,可以非常容易地構建分布式應用。這種C/S模型的訪問方式,可以屏蔽掉RMI本身的復雜性,如服務端Skeleton和客戶端Stub等的處理細節,這些對於服務開發和服務使用的人員來說,都是透明的,無需過度關註,而集中精力開發你的商業邏輯。主要操作是兩個方面:

在服務端:可以通過org.springframework.remoting.rmi.RmiServiceExporter

可以暴露你的服務;

在客戶端:可以通過org.springframework.remoting.rmi.RmiProxyFactoryBean可以使用服務端暴露的服務,非常方便。


服務端端發布服務:

1 spring配置文件spring-mvc.xml如下指定了暴露的服務的名稱,通過serviceName屬性註入到RmiServiceExporter中,服務名稱為RmiService,客戶端通過該服務名稱就能夠進行調用

    <!--Spring RMI 服務端配置  panqq 2017-05-17 23:13:01 -->
    <bean id="baseRmiService" class="com.rmi.RmiServiceImpl" /> 
    <bean id="baseServiceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">  
        <!-- 調用Service -->  
        <property name="service" ref="baseRmiService" />
        <!-- value值是提供給客戶端調用 -->  
        <property name="serviceName" value="rmiService" />
        <!-- service接口 -->  
        <property name="serviceInterface" value="com.rmi.RmiService" />
        <!-- 註冊端口 -->  
        <property name="registryPort" value="8088" />
    </bean>


2 服務定義業務邏輯的接口和實現類

//定義接口
public interface RmiService {
	public String getAccessToken();
	public String getTicket() ;
	public JSONObject sendMsg(JSONObject data,String toUserId,String toOpenId,String templateId,String url);
}

//該接口的實現類
public class RmiServiceImpl implements RmiService {
    .....
}


客戶端口調用服務

1 客戶端client.xml配置:配置中,將一個serviceUrl和serviceInterface註入給RmiProxyFactoryBean,即可進行遠程方法調用。調用示例如下所示

<!-- spring rmi 客戶端配置  -->
	<bean id="rmiService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
		<!-- baseService是調用服務端serviceName的value,8088是服務端註冊的端口 -->
		<property name="serviceUrl" value="rmi://localhost:8088/rmiService" />
		<!-- service接口 -->
		<property name="serviceInterface" value="com.rmi.RmiClientService" />
	</bean>


2 客戶端的實現類:


public interface RmiClientService {	
	public String getAccessToken();
	public String getTicket() ;
	public JSONObject sendMsg(JSONObject data,String toUserId,String toOpenId,String templateId,String url);
}


代碼實現:這樣就可以實現接口映射,實現遠程調用服務端接口的。可用註解方式,或者直接調用client.xml方式調用

...
public RmiClientService rmiService;
@Test
public void testMsg() {
	......
*/    	rmiService.sendMsg(data, "674581a5310145c9888cae", "oGUg1wok3VAsG6qYX1Kg1", ConStant.wechatmsgmode_rztg, "");// 發送微信消息
}


public static void main(String[] args) {  
        ApplicationContext ctx = new ClassPathXmlApplicationContext(  
                "org/xxx/xxx/xx/client.xml");  
        RmiClientService service = (AccountService) ctx  
                .getBean("rmiService");  
        String result = service.sendMsg(data, "674581a5310145c9888cae", "oGUg1wok3VAsG6qYX1Kg1", ConStant.wechatmsgmode_rztg, "");// 發送微信消息 
    }


本文出自 “12056352” 博客,請務必保留此出處http://12066352.blog.51cto.com/12056352/1940207

rmi簡單用例,簡單有效