发表于: 2019-05-27 22:16:29

1 578


根据教程做了个小demo,看的出来rmi是靠url绑定对象进行数据传输的。

还是不太清楚rmi的运行顺序和机制。

只是知道rmi是通过辅助对象进行访问。

/**
* 客户端程序
*/
public class RmiClient {
public static void main(String[] args){
try {
Rmi rmi = (Rmi) Naming.lookup("rmi://127.0.0.1:8888/Rmi");
           System.out.println(rmi);
           System.out.println(rmi.sayHello("mmmmmmmmmm"));
       } catch (RemoteException | NotBoundException | MalformedURLException e) {
e.printStackTrace();
       }
}
}


/**
* 服务器端程序
*/
public class RmiService {
public static void main(String[] args){
org.apache.log4j.Logger logger = Logger.getLogger(RmiService.class);
       try {
//创建一个远程对象
           Rmi rmi = new RmiServiceImpe();

           //远程主机远程对象注册表Registry的实例,并指定端口8888(java默认是1099)
           //缺少了注册表创建的话,则无法绑定对象到远程注册表上。
           LocateRegistry.createRegistry(8888);

           //把远程对象绑定到RMI注册服务器上,并命名
           //绑定的URL标准格式为:rmi://host:port/name(协议名可以省略。)
           Naming.bind("rmi://127.0.0.1:8888/Rmi",rmi);
//            Naming.bind("//localhost:8888/Rmi",rmi);

           logger.info("远程对象绑定成功");
           //必须捕获这三个异常。
       } catch (RemoteException | MalformedURLException | AlreadyBoundException e) {
e.printStackTrace();
       }
}
}


spring封装rmi的配置文件

<bean id="RMIServiceImpe" class="service.serivcelmpe.RMIServiceImpe"/>
<!--将一个类发布为rim服务-->
<bean id="myRMIServer" class="org.springframework.remoting.rmi.RmiServiceExporter">
   <property name="serviceName" value="Rmi"/><!--这里的Rmi要和客户端的url后面的一样-->
   <property name="service" ref="RMIServiceImpe"/>
   <property name="serviceInterface" value="service.RmiService"/><!--访问远程服务的类的抽象基类-->
   <property name="registryPort" value="8888"/><!--端口要一致-->
</bean>



   <!-- 客户端 -->
<bean id="myRMIClient"  class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
   <property name="serviceInterface" value="service.RmiService"/><!--访问远程服务的类的抽象基类-->
   <property name="serviceUrl" value="rmi://127.0.0.1:8888/Rmi"/><!--客户端接收这个url里面的值-->
</bean>


虽然能够运行了,但是还是不能理解为什么web下面要放接口,而且controller不能够连自己的service的接口,不然会报错。

按照我的想法是既然controller下有接口那不应该连自己的接口,为什么还只能连service层的接口,但是配置文件里面却可以引controller中service的接口。


明天计划的事:尽快做完


遇到的问题:bug修改中


返回列表 返回列表
评论

    分享到