Hadoop RPC远程过程调用协议简单实现

Hadoop RPC远程过程调用协议简单实现

  • 简单来说,RPC就是 客户端的进程 远程调用 服务器端进程 中的方法(自己理解的,不一定对)。

1.Java代码

  • 首先在本机编写代码
Server端:
package cn.tjubd.hadoop.rpc;

import java.io.IOException;

import org.apache.hadoop.HadoopIllegalArgumentException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.RPC.Server;

public class RPCServer implements Barty{

	public static void main(String[] args) throws HadoopIllegalArgumentException, IOException {
		Server server = new RPC.Builder(new Configuration())
			.setInstance(new RPCServer())
			.setBindAddress("172.28.9.62")//服务器地址
			.setPort(9527)//端口
			.setProtocol(Barty.class)
			.build();
		server.start();
	}

	@Override
	public String sayHi(String name) {
		// 客户端将要调用的方法
		return "HI~" + name;
	}
}
  • 这里的服务器地址需要能与本机建立连接,在本机命令行中 ping 服务器地址
  • ping 172.28.9.62,能ping 通即可。
接口:
package cn.tjubd.hadoop.rpc;

public interface Barty {

	public static final long versionID = 10010;
	
	public String sayHi(String name);
}
Client端:
package cn.tjubd.hadoop.rpc;

import java.io.IOException;
import java.net.InetSocketAddress;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
/*
 * 当CPU上的RPCServer 运行时,本机的RPCClient 可以调用RPCServer 中的方法
 * 实现 客户端进程 调用 服务器端进程 中的方法--->远程调用
 */
public class RPCClient {

	public static void main(String[] args) throws IOException {
		Barty proxy = RPC.getProxy(Barty.class, 10010,
				new InetSocketAddress("172.28.9.62", 9527),
				new Configuration());//建立到Server 的连接
		String sayHi = proxy.sayHi("GG Bond");//调用Server 进程中的方法
		System.out.println(sayHi);
		RPC.stopProxy(proxy);
	}
}

2.运行

  • 2.1 把RPCServer导成jar 包,扔到服务器上去,然后运行
    java -jar RPCServer.jar,结果如下:Hadoop RPC远程过程调用协议简单实现_第1张图片
  • 2.2 本机运行RPCClient ,结果如下:Hadoop RPC远程过程调用协议简单实现_第2张图片
  • 说明:为了避免看起来像是调用的本地的RPCServer,在运行RPCClient 之前,我已将本地的RPCServer删除,如上图红框中的那样。
    控制台中打出 HI~GG Bond 则说明确实完成了远程调用。
  • 项目的完整代码已经上传至 https://download.csdn.net/download/qq_34233510/10993518
  • 欢迎下载~_~

Over!

你可能感兴趣的:(hadoop,database,Java)