写点什么

大数据训练营 -0718 课后作业

用户头像
cc
关注
发布于: 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 端启动日志:


用户头像

cc

关注

还未添加个人签名 2018.03.19 加入

还未添加个人简介

评论

发布
暂无评论
大数据训练营 -0718课后作业