标签:config class 对象 server size except als use ado
Remote Procedure Call(简称RPC):远程过程调用协议
1. 通过网络从远程计算机程序上请求服务
2. 不需要了解底层网络技术的协议(假定某些传输协议的存在,如TCP或UDP)
3. 采用客户机/服务机模式
请求程序就是一个客户机,服务提供程序就是一个服务器
例子:hadoop RPC机制的一个简单实现
1.导jar包,/share/hadoop/common 的相关的jar包 以及/share/hadoop/hdfs 相关的jar包
2.编程实现
1). 定义一个协议接口 如 Isay 接口
public interface Isay { public static final long versionID=1234L;//前后一致 public String say(String username); }
2). 创建通信的服务端 (服务程序实现协议接口)
public class SayRpcServer implements Isay{ //实现Isay接口 @Override public String say(String username) { // TODO Auto-generated method stub System.out.println("server received data->["+username+"]"); return "Hello! ["+username+"]"; } public static void main(String[] args) throws HadoopIllegalArgumentException, IOException { Configuration conf = new Configuration(); //创建builder对象 Builder builder = new RPC.Builder(conf); //为builder设置服务对象,服务端地址,端口,定义代理协议 builder.setInstance(new SayRpcServer()).setBindAddress("Master").setPort(8001).setProtocol(Isay.class); //创建 server Server server = builder.build(); //启动 server server.start(); System.out.println("server started"); } }
3).创建一个通信客户端
public class SayRpcClient { private static Scanner sc; public static void main(String[] args) throws IOException { InetSocketAddress inetSocketAddress=new InetSocketAddress("Master", 8001); Configuration conf=new Configuration(); //初始化 RPC 代理 Isay proxySay=RPC.getProxy(Isay.class, 1234L, inetSocketAddress, conf); System.out.println("请输入用户名(quit退出)"); //从控制台读入数据 sc=new Scanner(System.in); while(sc.hasNext()) { String userName=sc.next(); if("quit".equals(userName)) {//设定退出条件 System.out.println("RPC client exited"); return ; } String s=proxySay.say(userName);//远程调用 System.out.println(s); System.out.println("请再输入姓名(quit退出)"); } } }
4)输出结果
1.启动服务端
server started
2.启动客户端
请输入用户名(quit退出) Jack Hello! [Jack] 请再输入姓名(quit退出) Mark Hello! [Mark] 请再输入姓名(quit退出) quit RPC client exited
同时server的输出结果
server started server received data->[Jack] server received data->[Mark]
标签:config class 对象 server size except als use ado
原文地址:https://www.cnblogs.com/tongxupeng/p/10257614.html