rmi簡單用例,簡單有效
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簡單用例,簡單有效