服务器之间使用rmi,如本地方法调用,可直接访问缓存

来源:互联网 发布:寻找质数的算法 python 编辑:程序博客网 时间:2024/05/17 22:35

这几天想学习rmi的使用,网上查找的绝大部分都是在同一个项目调用的,个人感觉意义不大,不然只在同项目调用如何使rmi实现分布式。有一个链接的回答是把需要共用的接口打包,分别让服务端和客户端引用这个包,就可以实现跨项目调用rmi。目前尝试成功运行,下面贴代码

首先建立公用项目,也就是要暴露的接口给客户端调用(项目都使用了maven,方便依赖,只是为了实现这个功能,具体并没有配置)

具体代码(需要实现的业务逻辑方法在公用接口添加):

package rmi;import java.rmi.Remote;import java.rmi.RemoteException;public interface RmiServerIntf extends Remote {    public String getMessage() throws RemoteException;}
注意:这里需要继承Remote,声明此方法是暴露的rmi方法,同时需要抛出RemoteException,具体我还没有深入了解大笑


服务器项目结构


接下来是服务器代码

package server;import java.rmi.Naming;import java.rmi.RemoteException;import java.rmi.registry.LocateRegistry;import java.rmi.server.UnicastRemoteObject;import rmi.RmiServerIntf;public class RmiServer extends UnicastRemoteObject implements RmiServerIntf {public static final String MESSAGE = "Hello World";    public RmiServer() throws RemoteException {        super(0);    }    public String getMessage() {        return MESSAGE;    }    public static void main(String args[]) throws Exception {        System.out.println("RMI server started");        try {             LocateRegistry.createRegistry(1099);             System.out.println("java RMI registry created.");        } catch (RemoteException e) {            System.out.println("java RMI registry already exists.");        }                   RmiServer obj = new RmiServer();        Naming.rebind("//localhost/RmiServer", obj);        System.out.println("PeerServer bound in registry");    }}
运行即启动了rmi服务端,监控客户端调用

运行成功控制台打印

客户端项目结构


最后是客户端代码

package client;import java.rmi.Naming;import rmi.RmiServerIntf;public class RmiClient {     public static void main(String args[]) throws Exception {        RmiServerIntf obj = (RmiServerIntf)Naming.lookup("//localhost/RmiServer");        System.out.println(obj.getMessage());     }}
运行客户端,打印服务端返回的数据


至此就全部完成了,这只是在本地运行的,后续测试两台服务器之间通讯

=========================================================

第一次写blog,排版方面需要学习,希望可以帮到读者们,整个项目的关键在于公用的接口需要打包,然后客户端和服务端依赖这个包

最后是maven的依赖

需要客户端和服务端添加依赖

  <dependencies>  <dependency>  <groupId>rmi-interfaces</groupId>  <artifactId>rmi-interfaces</artifactId>  <version>0.0.1</version>  </dependency>  </dependencies>


==========================================================================




贴上项目代码,经测试,可以在两台服务器上进行通讯,相当于调用本地方法,非常方便,这个项目也算是我走进分布式的一小步,继续努力

https://github.com/chenyinghui/rmi-interfaces.git

https://github.com/chenyinghui/rmi-client.git

https://github.com/chenyinghui/rmi-server.git


原创粉丝点击