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);

查看调用结果:

调用结果

博主微信公众号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值