rmi远程方法调用入门

rmi入门

rmi(Remote Method Invocation)是java本身提供的一种rpc框架,它允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。 这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中。

调用步骤

1、客户调用客户端辅助对象stub上的方法。
2、客户端辅助对象stub打包调用信息(变量、方法名),通过网络发送给服务端辅助对象skeleton。
3、服务端辅助对象skeleton将客户端辅助对象发送来的信息解包,找出真正被调用的方法以及该方法所在对象。
4、调用真正服务对象上的真正方法,并将结果返回给服务端辅助对象skeleton。
5、服务端辅助对象将结果打包,发送给客户端辅助对象stub。
6、客户端辅助对象将返回值解包,返回给调用者。
7、客户获得方法返回值。

实例

这里需要说明的是接口和模型 是消费者提供,我们可以将接口和模型打包成maven依赖的方式 提供给消费者使用。

定义服务接口和模型

//模型类
public class User implements Serializable {
    private String name;
    private int id;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", id=" + id +
                '}';
    }
}

//接口,需要继承Remote类,提供的方法允许抛出RemoteException
public interface UserService extends Remote {
    User getUser() throws RemoteException;
}

实现接口

//UnicastRemoteObject会暴露当前服务
public class UserServiceImpl extends UnicastRemoteObject implements UserService {
    public UserServiceImpl() throws RemoteException {
    }
    @Override
    public User getUser() throws RemoteException {
        User user = new User();
        user.setId(1);
        user.setName("123");
        return user;
    }
}

服务端暴露服务

UserService userService = new UserServiceImpl();
//注册端口
LocateRegistry.createRegistry(8888);
//绑定服务
 Naming.bind("rmi://localhost:8888/UserService", userService);

客服端调用服务

UserService userService = (UserService) Naming.lookup("rmi://localhost:8888/UserService");
User user = userService.getUser();
System.out.println(user);

查看调用结果:

调用结果

博主微信公众号

posted on 2020-08-25 22:52  幕友皎敖奔乾  阅读(187)  评论(0编辑  收藏  举报

导航