大数据训练营 -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;
//启动RPC
public 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 加入
还未添加个人简介
评论