4.gRPC:gRPC是谷歌团队基于Netty开发实现的底层网络库,而此框架还有Go语言的版本,基于Net库开发
5.RMI:rmi可以说是java中最早的RPC框架之一,且此rpc框架由sun团队开发,集成于JDK中,可以说完全可以实现开箱即用,不需要任何外部jar依赖,但由于早期的rpc实现,且设计上并不是为了解决互联网企业类的高并发问题,所以不建议现在互联网开发中作为rpc实现
RMI框架基本使用
RMI既然是java团队设计出来的rpc框架,虽然现在已经不适合企业级生产使用,但是其中的思想和规范值得学习,我们就来看看RMI框架如何使用吧:
RMI三大基本类
实现RMI所需要的API基本都在三大类中,如下:
java.rmi
:提供客户端需要的类、接口和异常;
java.rmi.server
:提供服务端需要的类、接口和异常;
java.rmi.registry
:提供注册表的创建以及查找和命名远程对象的类、接口和异常 ;
构建RMI服务端
首先在RMI中服务端供客户端调用的实例称之为远程对象,而在RMI中实现了java.rmi.Remote接口的类或者继承了java.rmi.Remote接口的都是RMI的远程对象。那么我们来定义一个接口,继承java.rmi.Remote:
/**
*用户处理器
**/
public interface UserHandler extends Remote {
String getUserName(int id) throws RemoteException;
String getUserPassWord() throws RemoteException;
User getUserByName(String name) throws RemoteException;
}
这里需要注意的一点是,继承了Remote接口的接口中定义的所有的方法必须抛出RemoteException异常,并且该接口的实现类必须直接或者间接继承java.rmi.server.UnicastRemoteObject类,该类中提供了很多支持RMI的方法,可以通过JRMP协议导出一个远程对象的引用,生成动态代理构建的Stub对象,实现代码如下:
public class UserHandlerImpl extends UnicastRemoteObject implements UserHandler {
//这里因为集继承了UnicastRemoteObject类,其构造器要抛出RemoteException,所以申明构造
public UserHandlerImpl() throws RemoteException {
super();
}
@Override
public String getUserName