写点什么

0718 作业:Hadoop RPC

作者:arctec
  • 2021 年 11 月 18 日
  • 本文字数:1443 字

    阅读完需:约 5 分钟

根据示例,完成一个类似的 RPC 函数:

// 要求:输入你的真实学号,返回你的真实姓名

// 输入学号 20210000000000,返回 null

// 输入学号 20210123456789,返回心心

// 作业上缴:截图 server 端和 client 端的执行结果

String findName(int studentId);

•1. 首先需用定义一个协议,它描述了服务对外提供了哪些接口或者功能。

package com.gaoyong.bd.rpc;


import org.apache.hadoop.ipc.VersionedProtocol;


public interface StuService extends VersionedProtocol {/*** 定义版本号*/long versionID=1l;


/** 输入你的真实学号,返回真实姓名*/public String finaName(long studentId);
复制代码


}

•2. Server 端需要实现协议接口,并返回版本号:

package com.gaoyong.bd.rpc;


import org.apache.commons.lang.StringUtils;import org.apache.hadoop.ipc.ProtocolSignature;


import java.io.IOException;


public class StuServiceImpl implements StuService {@Overridepublic String finaName(long studentId) {String name =null;if(studentId<=0L){name ="请输入正确的学号";}else if (studentId == 20210123456789L){name ="心心";}return name;


}
@Overridepublic long getProtocolVersion(String protocol, long clentVserion) throws IOException { return StuService.versionID;}
@Overridepublic ProtocolSignature getProtocolSignature(String s, long l, int i) throws IOException { return null;}
复制代码


}

•3. 构建 Server,绑定协议的实现类,并启动 server。

package com.gaoyong.bd.rpc.service;


import com.gaoyong.bd.rpc.StuService;import com.gaoyong.bd.rpc.StuServiceImpl;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.ipc.RPC;


import java.io.IOException;


//启动 RPCpublic class StuRPCService {public static void main(String[] args) {RPC.Builder builder= new RPC.Builder(new Configuration());//服务器 IP 地址 builder.setBindAddress("127.0.0.1");//端口号 builder.setPort(8888);


    builder.setProtocol(StuService.class);    builder.setInstance(new StuServiceImpl());
try { RPC.Server server = builder.build(); server.start(); System.out.println("RPC SERVER STARTED"); } catch (IOException e) { e.printStackTrace(); }
}
复制代码


}

•4. 构建客户端,并访问 add 服务。

package com.gaoyong.bd.rpc.client;
import com.gaoyong.bd.rpc.StuService;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.ipc.RPC;
import java.io.IOException;import java.net.InetSocketAddress;
public class StuRPCClient { public static void main(String[] args) { try { StuService proxy = RPC.getProxy(StuService.class,1L,new InetSocketAddress("127.0.0.1",8888),new Configuration()); String name1 = proxy.finaName(20210123456789L); System.out.println("【Client】输入学号为:20210123456789L,学生姓名为:"+name1); String name2 = proxy.finaName(20210000000000L); System.out.println("【Client】输入学号为:20210000000000L,学生姓名为:"+name2); } catch (IOException e) { e.printStackTrace(); } }}
复制代码
结果截图


1.RPC SERVER 启动日志:

2.RPC Client 启动日志:


用户头像

arctec

关注

还未添加个人签名 2019.08.21 加入

还未添加个人简介

评论

发布
暂无评论
0718作业:Hadoop RPC