Rpc Yarn中的Rpc协议 hadoop2.x中的Rpc Rpc案例 写个程序
Rpc是CS模式 有客户端和服务端 所以先写一个协议(就是个接口)
package qf.com.rpc; /* *@author Shishuai E-mail:1198319583@qq.com *@version Create time : 2019年5月23日下午5:24:01 *接口说明:rpc中的协议 */ public interface Hello { public static final long versionID = 1; /** * 协议 */ public String say(String words); }然后写服务器端
package qf.com.rpc; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; import org.apache.hadoop.ipc.RPC.Server; /* *@author Shishuai E-mail:1198319583@qq.com *@version Create time : 2019年5月23日下午5:26:24 *类说明:rpc中的server服务器 */ public class RpcServer implements Hello { public String say(String words) { System.out.println(words); //然后可以写点逻辑代码 就先不写了 return "received datanode01 heartbeats!"; } public static void main(String[] args) { try { //获取一个 Server server = new RPC.Builder(new Configuration()) .setInstance(new RpcServer())//设置实例 .setProtocol(Hello.class)//设置协议 .setBindAddress("127.0.0.1")//当前的机子地址 .setPort(6666)//设置端口 随便 Windows没用的就行 .build();//这样就可以得到server服务 //启动服务· server.start(); System.out.println("server is started......"); } catch (Exception e) { // TODO: handle exception } } }然后写客户端
package qf.com.rpc; import java.io.IOException; import java.net.InetSocketAddress; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; /* *@author Shishuai E-mail:1198319583@qq.com *@version Create time : 2019年5月23日下午6:33:49 *类说明:Rpc中的客户端 */ public class RpcClient { public static void main(String[] args) { //RPC.getProtocolProxy(protocol, clientVersion, addr, conf) //第一个协议 第二个版本 在接口即协议里写明白这里再使用 不然报错 第三个地址 try { while(true) { Hello hello = RPC.getProxy(Hello.class, 1, new InetSocketAddress("127.0.0.1", 6666), new Configuration()); String reString = hello.say("I am datanode01, I am live"); Thread.sleep(3000); System.out.println(reString); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }先启动Server 在启动Client 两个端口在进行通信 就是吧 先启动服务端 服务端说server is started… 然后我们再启动客户端 客户端的代码是个死循环 这个循环里连接了服务器端 然后对服务器说I am datanode1 I am live 服务器收到后打印 然后返回给客户端received datanode01 headbeats 表示已经收到了客户端来信 客户端打印出这句话 然后就一直循环下去