大数据训练营 -0718 课后作业
发布于: 4 小时前
作业:Hadoop RPC
根据文档中的示例,完成一个类似的 RPC 函数,要求:
输入你的真实学号,返回你的真实姓名
输入学号 20210000000000,返回 null
输入学号 20210123456789,返回心心
相关代码如下
1.定义代理服务接口,实现 finaName(long studentId),studentId 为学号,返回为学生姓名
同时继承 VersionedProtocol
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.定义具体服务类实现 StuServiceImpl
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 { @Override public String finaName(long studentId) { String name =null; if(studentId<=0L){ name ="请输入正确的学号"; } else if (studentId == 20210123456789L){ name ="心心"; } return name;
}
@Override public long getProtocolVersion(String protocol, long clentVserion) throws IOException { return StuService.versionID; }
@Override public ProtocolSignature getProtocolSignature(String s, long l, int i) throws IOException { return null; }}
复制代码
3.启动 RPC 服务,启动 RPC 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.使用客户端调用 RPC 服务
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 端启动日志:
划线
评论
复制
发布于: 4 小时前阅读数: 5
cc
关注
还未添加个人签名 2018.03.19 加入
还未添加个人简介











评论