Java通过Hadoop实现RPC通讯简单实例

一、定义server端代码

1.定义一个接口,该接口继承org.apache.hadoop.ipc.VersionedProtocol接口

import org.apache.hadoop.ipc.VersionedProtocol;

public interface MyInterface extends VersionedProtocol {
	
	//定义一个版本号
	public static long versionID = 1;
	
	//定义客户端可以调用的方法
	public String sayHello(String name);
}

2.定义实现以上接口的实现类

import java.io.IOException;

import org.apache.hadoop.ipc.ProtocolSignature;

public class MyInterfaceImpl implements MyInterface {

	@Override
	public ProtocolSignature getProtocolSignature(String arg0, long arg1,
			int arg2) throws IOException {
		// 指定签名
		return new ProtocolSignature(MyInterface.versionID, null);
	}

	@Override
	public long getProtocolVersion(String arg0, long arg1) throws IOException {
		// 返回的该实现类的版本号
		return MyInterface.versionID;
	}

	@Override
	public String sayHello(String name) {
		System.out.println("***********调用到了server端*************");
		return "Hello " + name;
	}

}

3.测试开启一个服务端

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 {

	/**
	 * @param args
	 * @throws IOException 
	 * @throws HadoopIllegalArgumentException 
	 */
	public static void main(String[] args) throws Exception {
		// 创建一个RPC builder
		RPC.Builder builder = new RPC.Builder(new Configuration());
		
		//指定RPC Server的参数
		builder.setBindAddress("localhost");
		builder.setPort(7788);
		
		//将自己的程序部署到server上
		builder.setProtocol(MyInterface.class);
		builder.setInstance(new MyInterfaceImpl());
		
		//创建Server
		Server server = builder.build();
		
		//启动服务
		server.start();
		
	}

}

二、客户端代码

import java.net.InetSocketAddress;

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

import first.com.demo.hadoop.example0413.rpc.server.MyInterface;

public class RPCClient {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		//得到服务器端的一个代理对象
		MyInterface proxy = RPC.getProxy(MyInterface.class, 
					 MyInterface.versionID, 
					 new InetSocketAddress("localhost", 7788), 
					 new Configuration());
		//获取服务器返回的结果
		String result = proxy.sayHello("tom");
		System.out.println("结果是:" + result);
	}

}
先运行服务端的main方法,然后运行客户端的方法可以进行通讯,这就是一个简单的RPC实例
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值