【Java】RPC与RMI,Java远程方法调用(RMI)


本文主要描述了在Java中使用RMI实现远程方法调用。

1. RPC与RMI

1.1. 什么是远程过程调用

RPC(Remote Processor Call)就是远程过程调用。是一个概念,既不是技术也不是框架。概念描述了以下信息:

  • 客户端把『要调用什么类,什么方法,传什么参数』告诉服务器。

  • 服务器根据要求完成调用,并把调用结果响应给客户端。

  • 客户端就可以拿到响应的数据。

上面3步完成后,就完成了远程过程调用。 关于RPC的概念可以参考马士兵老师的视频:https://www.bilibili.com/video/BV1zE41147Zq/?from=search&seid=13740626242455157002

1.2. 什么是RMI

RMI全称是Remote Method Invocation,其实它可以被看作是RPC的Java版本。Java RMI支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。

2. 使用Java远程方法调用(RMI)

使用RMI很简单,只需要如下的3个步骤:

  • 抽取公共接口代码
  • 客户端代码
  • 服务端代码

以下以客户端(Client.java)调用服务端(UserServiceImpl.java)获取用户名(getName)为例:

2.1. 公共接口代码

这是一个客户端和服务端都依赖的接口,客户端有这个接口就知道服务端提供了哪些功能,服务端需要实现接口来提供功能。

public interface UserService extends java.rmi.Remote {
	public String getName() throws RemoteException;
	public void updateName(String name) throws RemoteException;
}

2.2. 客户端代码

客户端代码指明了RMI去调用哪个服务器的哪个功能接口的哪个方法传什么参数。

  • 客户端的调用代码
public class Client {

	public static void main(String[] args) throws Exception {

		// 指明了我要去连那个服务器
		Registry registry = LocateRegistry.getRegistry("127.0.0.1", 8888);

		// 告诉服务端我需要这个"功能接口"
		UserService user = (UserService) registry.lookup("user");

		// 告诉服务端RPC的调用信息(什么接口、什么方法、什么参数),要求服务端完成调用并返回结果
		System.out.println("远程调用的结果是:" + user.getName());
	}
}

2.3. 服务端代码

  • 注册服务
public class Server {
	public static void main(String[] args) throws Exception {
		UserService liming = new UserServiceImpl();

		// 注册一个端口提供服务
		Registry registry = LocateRegistry.createRegistry(8888);

		// 暴露服务端的功能
		registry.bind("user",liming);

		System.out.println("registry is running...");

		System.out.println("liming is bind in registry");
	}
}
  • 实现接口功能
public class UserServiceImpl extends UnicastRemoteObject implements UserService {
	public String name;
	public int age;

	protected UserServiceImpl() throws RemoteException {
	}

	public String getName(){
		return "["+ "张三" +"]";
	}

	public void updateName(String name){
		this.name = name;
	}
}

2.4. RMI调用过程图

原理图如下,需要用户写的只有Client和Server,其它都是RMI系统底层实现。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fire Fish

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值