Java RMI 实践
定义
Java 远程方法调用,即 Java RMI(Java Remote Method Invocation)是 Java 编程语言里,一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使 Java 编程人员能够在网络环境中分布操作。RMI 全部的宗旨就是尽可能简化远程接口对象的使用。
参考维基百科:https://wikipedia.tk.gugeeseo.com/baike-Java远程方法调用
实例
比如我们提供一个简单的 HelloService 服务调用,代码如下:
// 接口
public interface IHelloService {
String sayHello(String msg);
}
// 实现类
public class HelloServiceImpl implements IHelloService {
public String sayHello(String msg) {
return "Hello " + msg;
}
}
在同一个应用里面只需要实例化这个 HelloServiceImpl 对象就可以使用了,但是如果出现了跨进程、跨应用调用 HelloService 服务怎么实现呢?我们拿不到 HelloServiceImpl 对象。
所以我们使用 Java RMI 来实现跨进程、跨应用的服务调用。如果要实现 Java RMI 需要对 HelloService 服务做如下改动。
1.IHelloService 接口继承 Remote 接口,方法 sayHello 抛出 RemoteException 异常
public interface IHelloService extends Remote {
String sayHello(String msg) throws RemoteException;
}
2.HelloServiceImpl 类继承 UnicastRemoteObject 类,重写构造函数,方法 sayHello 抛出 RemoteException 异常
**
public class HelloServiceImpl extends UnicastRemoteObject implements IHelloService {
protected HelloServiceImpl() throws RemoteException {
super();
}
public String sayHello(String msg) throws RemoteException {
return "Hello " + msg;
}
}
3.发布服务
public class Server {
public static void main(String[] args) {
// 发布服务
try {
IHelloService helloService = new HelloServiceImpl();
LocateRegistry.createRegistry(2000);
Naming.rebind("rmi://127.0.0.1:2000/hello", helloService);
System.out.println("服务启动成功");
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.客户端的 Demo 里面调用远程服务
public class ClientDemo {
public static void main(String[] args) {
try {
IHelloService helloService =
(IHelloService) Naming.lookup("rmi://127.0.0.1:2000/hello");
System.out.println(helloService.sayHello("zhangsan"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
RMI 源码分析
作者:殷建卫 链接:https://www.yuque.com/yinjianwei/vyrvkf/co43r6 来源:殷建卫 - 架构笔记 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。