使用Hadoop提供的工具实现基于Proto协议的RPC通信

简介: 使用Hadoop提供的工具实现基于Proto协议的RPC通信

完成RPC实现和调用的方法很多,有gRPC,Springcloud,Thrift,当然还有我们阿里出品的大名鼎鼎的Dubbo,还有一个大数据领域的框架,肯定也会实现RPC的机制。使用Hadoop实现RPC通信前,先准备一下我们的proto文件以及生成协议类,具体参考https://developer.aliyun.com/article/1172921?spm=a2c6h.13148508.setting.16.5ce84f0eKKzUID。将HelloGrpc.java和HelloGrpcServiceGrpc.java拷贝到我们的项目目录。下面来实现Hadoop提供的工具类如何实现的,首先引入依赖

<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.8.5</version></dependency>

然后定义我们的接口以及接口的实现,主要是对proto协议规范的东西进行封装和方法实现,最重要的一点是接口要继承Hadoop里的RPC接口VersionedProtocol

packagecom.proto.server;
importorg.apache.hadoop.ipc.VersionedProtocol;
importtest.hello.HelloGrpc;
publicinterfaceHelloHadoopRpcServiceextendsVersionedProtocol {
publiclongversionID=2L;
HelloGrpc.HelloGrpcResponsequery(HelloGrpc.HelloGrpcRequestrequest);
}
packagecom.proto.server;
importorg.apache.hadoop.ipc.ProtocolSignature;
importtest.hello.HelloGrpc;
importjava.io.IOException;
publicclassHelloHadoopRpcServiceImplimplementsHelloHadoopRpcService{
@OverridepublicHelloGrpc.HelloGrpcResponsequery(HelloGrpc.HelloGrpcRequestrequest) {
Stringname=request.getName();
HelloGrpc.HelloGrpcResponse.Builderbuilder=HelloGrpc.HelloGrpcResponse.newBuilder();
builder.setResult("Welcome "+name);
HelloGrpc.HelloGrpcResponseresponse=builder.build();
returnresponse;
    }
@OverridepubliclonggetProtocolVersion(Strings, longl) throwsIOException {
returnversionID;
    }
@OverridepublicProtocolSignaturegetProtocolSignature(Strings, longl, inti) throwsIOException {
returnnewProtocolSignature();
    }
}

上述接口和实现类写好了以后,下面就是将上面的接口和实现暴露出去

packagecom.proto.server;
importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.ipc.RPC;
importjava.io.IOException;
publicclassHelloHadoopRpcServer {
publicstaticvoidmain(String[] args) throwsIOException {
Configurationconf=newConfiguration();
// 构建 Rpc ServerRPC.Serverserver=newRPC.Builder(conf)
                .setProtocol(HelloHadoopRpcService.class)
                .setInstance(newHelloHadoopRpcServiceImpl())
                .setPort(29998)
                .setNumHandlers(1)
                .build();
server.start();
    }
}

最后使用客户端调用上述的服务

packagecom.proto.client;
importcom.proto.server.HelloHadoopRpcService;
importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.ipc.RPC;
importtest.hello.HelloGrpc;
importjava.io.IOException;
importjava.net.InetSocketAddress;
publicclassHelloHadoopRpcClient {
publicstaticvoidmain(String[] args) throwsIOException {
Configurationconf=newConfiguration();
Stringhostname="localhost";
intport=29998;
// 获取代理HelloHadoopRpcServiceprotocolProxy=RPC                .getProxy(HelloHadoopRpcService.class, 2, newInetSocketAddress(hostname, port), conf);
// 构建请求对象HelloGrpc.HelloGrpcRequest.Builderbuilder=HelloGrpc.HelloGrpcRequest.newBuilder();
HelloGrpc.HelloGrpcRequestname=builder.setName("anisbob").build();
// 发送 RPC 请求,获取响应HelloGrpc.HelloGrpcResponseresponse=null;
try {
response=protocolProxy.query(name);
        } catch (Exceptione) {
e.printStackTrace();
        }
// 处理响应Stringresult=response.getResult();
System.out.println("查询结果: result = "+result);
    }
}

按照顺序启动上述服务端和客户端程序,在客户端控制台可以看到输出:查询结果: result = Welcome anisbob。

仅仅是为了好奇和兴趣,才写了上面的代码,还是gRPC的方式比较常规一点。

目录
相关文章
|
6月前
|
Dubbo Cloud Native 网络协议
【Dubbo3技术专题】「服务架构体系」第一章之Dubbo3新特性要点之RPC协议分析介绍
【Dubbo3技术专题】「服务架构体系」第一章之Dubbo3新特性要点之RPC协议分析介绍
94 1
|
Dubbo Java 应用服务中间件
由浅入深RPC通信原理实战1
由浅入深RPC通信原理实战1
69 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
50 3
|
1月前
|
分布式计算 负载均衡 算法
Hadoop-31 ZooKeeper 内部原理 简述Leader选举 ZAB协议 一致性
Hadoop-31 ZooKeeper 内部原理 简述Leader选举 ZAB协议 一致性
28 1
|
6月前
|
Java Android开发
java利用xml-rpc协议操作wordpress博客
java利用xml-rpc协议操作wordpress博客
84 1
|
5月前
|
存储 分布式计算 Hadoop
Spark和Hadoop都是大数据处理领域的重要工具
【6月更文挑战第17天】Spark和Hadoop都是大数据处理领域的重要工具
178 59
|
3月前
|
API 开发者 微服务
RPC和 HTTP协议
【8月更文挑战第8天】RPC(远程过程调用)使程序能像本地调用般请求远程服务,简化网络通信细节。其优点包括高效的数据传输及严格的类型定义,适合微服务间的高效通信。HTTP(超文本传输协议)则是用于万维网数据传输的通用协议,以文本为基础,易于理解和调试,并被广泛支持。两者各有侧重,RPC偏高速服务通信,HTTP则更适用于多样化的网络场景。选择时需根据具体需求决定。
|
3月前
|
存储 SQL 分布式计算
揭秘Hadoop:如何用这个超级工具征服大数据的海洋
【8月更文挑战第7天】Hadoop是一个强大的分布式系统基础架构
62 1
|
3月前
|
XML 存储 JSON
(十二)探索高性能通信与RPC框架基石:Json、ProtoBuf、Hessian序列化详解
如今这个分布式风靡的时代,网络通信技术,是每位技术人员必须掌握的技能,因为无论是哪种分布式技术,都离不开心跳、选举、节点感知、数据同步……等机制,而究其根本,这些技术的本质都是网络间的数据交互。正因如此,想要构建一个高性能的分布式组件/系统,不得不思考一个问题:怎么才能让数据传输的速度更快?
|
4月前
|
分布式计算 监控 安全
Hadoop格式化前使用DistCp工具
【7月更文挑战第23天】
54 6

相关实验场景

更多