发表于: 2017-11-23 22:41:57

1 625


今天完成的事情

了解rmi

Java RMI 指的是远程方法调用
Remote Method Invocation
它是一种机制,能够让在某个Java虚拟机上的对象调用另一个Java虚拟机中的对象上的方法,可以用此方法调用的任何对象必须实现给远程接口


spring 集成了对rmi的支持,可以非常容易地构建分布式应用,在服务端,利用RmiServiceExporter来暴露服务,在客户端,通过RmiProxyFactoryBean可以使用服务端暴露的服务,这种方式屏蔽掉了rmi本身的复杂性,


尝试用rmi实现分离

在服务端提供接口和实现类:

public interface HelloRMI {
int getAdd(int a,int b);
}

实现:

public class HelloRMIImpl implements HelloRMI{
public int getAdd(int a,int b){
return a+b;
   }
}

还需要有一个main方法用来运行程序,并规定连接地址和端口号:

public static void main(String[] args)throws RemoteException {
try{
IHello rHello = new IHelloImpl();
       LocateRegistry.createRegistry(9999);
       Naming.bind("rmi://127.0.0.1:9999/Rhello",rHello);
       System.out.println(">>>绑定成功");
   }catch (MalformedURLException e){
e.printStackTrace();
   }catch(AlreadyBoundException e){
e.printStackTrace();
   }
}

然后新建一个项目,作为客户端,需要有和服务端一样的接口:

public interface HelloRMI {
int getAdd(int a, int b);
}

在main方法中执行连接,通过接口调用服务端的方法

public static void main(String[] args) {
try{
IHello rHello = (IHello) Naming.lookup("rmi://127.0.0.1:8999/Rhello");
       System.out.println(rHello.sum(3,4));
   }catch (Exception e){
e.printStackTrace();
   }
}

然后先启动服务端的main方法,会一直保持运行状态,再启动客户端的main方法,可以实现方法的调用:


之后尝试spring 用rmi实现web和service的分离

用之前的任务代码来修改,作为服务端的项目可以删除controller,删除webapp下所有文件,删除spring mvc的配置文件,通过service层的接口提供相应的方法

关于端口,链接地址等只需要在spring的配置文件中注入即可,通过RmiServiceExporter来暴露服务

<bean id="testservice" class="org.springframework.remoting.rmi.RmiServiceExporter">
   <property name="service" ref="student"/>
   <property name="serviceName" value="hei2"/>
   <property name="serviceInterface" value="com.jnshu.service.StudentWebService2"/>
   <property name="registryPort" value="9000"/>
</bean>

在实现的方法中添加一句输出,用来判断是否调用成功:

public List<StudentWeb> list(){
System.out.println("222222222222");
   return studentWebMapper.list();
}

再添加一个main方法来保持程序的运行:

public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext(
"applicationContext.xml");
   System.out.println("OK2");
}

作为客户端的项目,可以删除所有java源代码文件下的所有文件,再重新添加和服务端对应的接口,和一个提供main方法的类即可,spring配置文件中注入建立连接的信息:

<bean id="testclient2" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
   <property name="serviceUrl" value="rmi://127.0.0.1:8888/hei2"/>
   <property name="serviceInterface" value="com.jnshu.service.StudentWebService2"/>
</bean>

启动tomcat,登陆页面成功显示:

方法执行成功


明天的计划

部署两台service,实现随机访问

部署到服务器


遇到的问题



收获

对分布式有了一些了解


返回列表 返回列表
评论

    分享到