先建树下java rmi工作原理
1、客户端发起请求,请求转交至RMI客户端的stub类;
2、stub类将请求的接口、方法、参数等信息进行序列化;
3、基于socket将序列化后的流传输至服务器端;
4、服务器端接收到流后转发至相应的skelton类;
5、skelton类将请求的信息反序列化后调用实际的处理类;
6、处理类处理完毕后将结果返回给skelton类;
7、Skelton类将结果序列化,通过socket将流传送给客户端的stub;
8、stub在接收到流后反序列化,将反序列化后的Java Object返回给调用者。
spring rmi实现
服务端实现
<bean class="org.springframework.remoting.rmi.RmiServiceExporter">
<property name="serviceName">
<value>gamesterService</value> 服务名字,可随便起
</property>
<property name="service">
<ref bean="pageLinksService" /> 接口实际实现类
</property>
<property name="serviceInterface">
<value>
com.test.servicesupport.IPageLinksService 对外暴露的接口
</value>
</property>
<!-- defaults to 1099 -->
<property name="registryPort">
<value>9000</value> 注意不要与其它端口冲突
</property>
</bean>
你需要向客户端提供接口类和配置文件
<bean id="pageLinksRemotingService"
class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl">
<value>rmi://192.168.216.186:9000/gamesterService</value>
</property>
<property name="serviceInterface">
<value>
com.airinbox.gamester.servicesupport.IPageLinksService
</value>
</property>
<property name="lookupStubOnStartup">
<value>false</value>
</property>
<property name="refreshStubOnConnectFailure">
<value>true</value>
</property>
<property name="cacheStub">
<value>false</value>
</property>
</bean>