使用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的方式比较常规一点。

目录
相关文章
|
2月前
|
JSON 自然语言处理 API
gRPC凭什么成为微服务通信首选?深度解析RPC进化史
本文深入解析了分布式系统中服务通信的核心机制,重点介绍了 RPC 与 gRPC 的原理、优势及使用场景,并详解 gRPC 所依赖的序列化协议 Protocol Buffers(Protobuf)。内容涵盖 RPC 概念、gRPC 特性、Protobuf 语法及服务定义,适合微服务架构设计与维护人员阅读,助你构建高性能、低耦合的服务通信体系。
428 73
gRPC凭什么成为微服务通信首选?深度解析RPC进化史
|
1月前
|
JSON 移动开发 网络协议
gRPC不是银弹:为内网极致性能,如何设计自己的RPC协议?
自研RPC协议针对内网高并发场景,通过精简帧头、长度前缀解决TCP拆包粘包,支持灵活扩展与高效序列化,显著提升性能与资源利用率,适用于对延迟敏感的分布式系统。
144 4
|
1月前
|
编解码 网络协议 Java
RPC的三大问题:跨语言、跨平台通信的终极解决方案是如何炼成的?
本文深入解析现代RPC体系的核心挑战与解决方案,涵盖数据表示、传输机制与调用约定,探讨gRPC、HTTP/2、ProtoBuf等技术如何实现高效可靠的跨服务通信,并分析自研RPC协议的设计思路与未来发展路径。
91 8
|
6月前
|
XML JSON 网络协议
利用HTTP POST协议实现简单的RPC协议:WireShark抓包分析
通过这种方式,我们可以使用HTTP POST实现简单的RPC协议,并使用WireShark进行抓包分析。这不仅可以帮助我们理解RPC协议的工作原理,也可以帮助我们调试和优化我们的代码。
289 30
|
6月前
|
JSON 数据格式
利用HTTP POST协议实现简单的RPC协议,并使用WireShark进行抓包分析
通过这种方式,我们可以利用HTTP POST实现简单的RPC协议,并使用WireShark进行抓包分析。这种方式简单易懂,实用性强,可以应用于各种网络编程场景。
228 16
|
11月前
|
Dubbo 安全 应用服务中间件
Apache Dubbo 正式发布 HTTP/3 版本 RPC 协议,弱网效率提升 6 倍
在 Apache Dubbo 3.3.0 版本之后,官方推出了全新升级的 Triple X 协议,全面支持 HTTP/1、HTTP/2 和 HTTP/3 协议。本文将围绕 Triple 协议对 HTTP/3 的支持进行详细阐述,包括其设计目标、实际应用案例、性能测试结果以及源码架构分析等内容。
625 117
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
305 3
|
分布式计算 负载均衡 算法
Hadoop-31 ZooKeeper 内部原理 简述Leader选举 ZAB协议 一致性
Hadoop-31 ZooKeeper 内部原理 简述Leader选举 ZAB协议 一致性
128 1
|
API 开发者 微服务
RPC和 HTTP协议
【8月更文挑战第8天】RPC(远程过程调用)使程序能像本地调用般请求远程服务,简化网络通信细节。其优点包括高效的数据传输及严格的类型定义,适合微服务间的高效通信。HTTP(超文本传输协议)则是用于万维网数据传输的通用协议,以文本为基础,易于理解和调试,并被广泛支持。两者各有侧重,RPC偏高速服务通信,HTTP则更适用于多样化的网络场景。选择时需根据具体需求决定。
148 2
|
存储 SQL 分布式计算
揭秘Hadoop:如何用这个超级工具征服大数据的海洋
【8月更文挑战第7天】Hadoop是一个强大的分布式系统基础架构
157 1

相关实验场景

更多