发表于: 2017-11-23 22:41:57
1 624
今天完成的事情
了解rmi
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,实现随机访问
部署到服务器
遇到的问题
无
收获
对分布式有了一些了解
评论