RPC 的主要作用是调用远程的服务,而且要快速。
Java自带的RPC一种实现:RMI。
我们可以通过RMI快速实现一个RPC服务。
先定义一个接口,叫MyService:
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface MyService extends Remote {
String hello(String someOne) throws RemoteException;
}
实现接口,也就是做的具体内容:
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class MyServiceImpl extends UnicastRemoteObject implements MyService {
protected MyServiceImpl() throws RemoteException {
}
@Override
public String hello(String someOne) throws RemoteException {
return "hello: " + someOne + " !";
}
}
写服务端代码,因为远程客户端要调用服务,所以要事先知道一个明确的端口。
import java.rmi.registry.LocateRegistry;
import java.rmi.Naming;
import java.rmi.server.RMISocketFactory;
public class Server {
public static void main(String[] args) throws Exception {
//注册服务
LocateRegistry.createRegistry(8866);
RMISocketFactory.setSocketFactory(RMISocketFactory.getDefaultSocketFactory());
//创建服务
MyService myService = new MyServiceImpl();
Naming.bind("rmi://localhost:8866/myService", myService);
System.out.println("RMI 服务端启动正常");
}
}
写客户端代码:
import java.rmi.Naming;
public class Client {
public static void main(String[] args) throws Exception {
//服务引入
MyService myService = (MyService) Naming.lookup("rmi://localhost:8866/myService");
//调用远程方法
System.out.println("RMI 服务端调用返回:" + myService.hello("Peter"));
}
}
然后就可以正常运行了,输出结果如下:
RMI 服务端调用返回:hello Peter!
RMI的缺点很明显:
1.只支持java
2.不是异步的I/O
3.没有长连接等配置
4.没有负载均衡等配置

本文介绍如何使用 Java 自带的 RMI 实现远程过程调用 (RPC) 服务。通过定义 MyService 接口及其实现,搭建服务端与客户端,演示了 RMI 的基本使用。同时指出了 RMI 的局限性,如仅支持 Java、缺乏异步 I/O 支持等。
403

被折叠的 条评论
为什么被折叠?



