Hadoop RPC协议之 ProtobufRpcEngine
来源:互联网 发布:域名抢注服务 编辑:程序博客网 时间:2024/05/21 19:29
用ProtobufRpcEngine来实现一个简单的RPC协议
add_test.proto
package rpcTest.protobuf;option java_package = "rpcTest.protobuf";option java_outer_classname = "ClientProto";message AddParameters {optional int32 para1 =1;optional int32 para2 = 3;}message AddResult {optional int32 result =1;}
AddService.proto
package rpcTest.protobuf;option java_package = "rpcTest.protobuf";option java_outer_classname = "Add";option java_generic_services = true;option java_generate_equals_and_hash = true;import "add_test.proto";service AddService { rpc add(AddParameters) returns (AddResult);}
进入原代码所在目录,使用以下命令生成java文件
protoc --proto_path=./ --java_out ../../ ./add_test.proto
protoc --proto_path=./ --java_out ../../ ./AddService.proto
AddProtocol.java
package rpcTest.protobuf;public interface AddProtocol { public int add(int para1,int para2);}
AddImpl.java
package rpcTest.protobuf;public class AddImpl implements AddProtocol { @Override public int add(int para1, int para2) { // TODO Auto-generated method stub return para1 + para2; }}
AddProtocolPB.java
package rpcTest.protobuf;import org.apache.hadoop.ipc.ProtocolInfo;import com.google.protobuf.RpcController;import rpcTest.protobuf.ClientProto.AddParameters;@ProtocolInfo(protocolName = "rpcTest.protobuf.AddProtocolPB", protocolVersion = 1)public interface AddProtocolPB { public ClientProto.AddResult add(RpcController controller,AddParameters p) ;}
AddProtocolTranslatorPB.java
package rpcTest.protobuf;import rpcTest.protobuf.ClientProto.AddParameters;public class AddProtocolTranslatorPB implements AddProtocol { final private AddProtocolPB rpcProxy; public AddProtocolTranslatorPB(AddProtocolPB proxy) { this.rpcProxy = proxy; } @Override public int add(int para1, int para2) { // TODO Auto-generated method stub AddParameters req = ClientProto.AddParameters.newBuilder() .setPara1(para1).setPara2(para2).build(); return rpcProxy.add(null, req).getResult(); }}
AddProtocolServerSidePB.java
package rpcTest.protobuf;import com.google.protobuf.RpcController;import rpcTest.protobuf.ClientProto.AddParameters;import rpcTest.protobuf.ClientProto.AddResult;public class AddProtocolServerSidePB implements AddProtocolPB, Add.AddService.BlockingInterface { final private AddProtocol server; public AddProtocolServerSidePB(AddProtocol server) { this.server = server; } @Override public AddResult add(RpcController controller, AddParameters p) { // TODO Auto-generated method stub rpcTest.protobuf.ClientProto.AddResult.Builder builder = ClientProto.AddResult .newBuilder(); int result = server.add(p.getPara1(), p.getPara2()); builder.setResult(result); return builder.build(); }}
ProtoRpcClient.java
package rpcTest.protobuf;import java.io.IOException;import java.net.InetSocketAddress;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.ipc.ProtobufRpcEngine;import org.apache.hadoop.ipc.RPC;public class ProtoRpcClient { final static long VERSION = 1; public static void main(String[] args) throws IOException { Configuration conf = new Configuration(); String ADDRESS = "localhost"; int port = 9998; RPC.setProtocolEngine(conf, AddProtocolPB.class, ProtobufRpcEngine.class); AddProtocolPB proxy = RPC.getProxy(AddProtocolPB.class, VERSION, new InetSocketAddress(ADDRESS,port), conf); AddProtocol add = new AddProtocolTranslatorPB(proxy); int result = add.add(100, 200); System.out.println("client result:" + result); // int result = proxy.add(5, 6); // System.out.println(result); }}
ProtoRpcServer.java
package rpcTest.protobuf;import java.io.IOException;import org.apache.hadoop.HadoopIllegalArgumentException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.ipc.ProtobufRpcEngine;import org.apache.hadoop.ipc.RPC;import com.google.protobuf.BlockingService;public class ProtoRpcServer { public static void main(String[] args) throws HadoopIllegalArgumentException, IOException{ Configuration conf = new Configuration(); String ADDRESS = "localhost"; int port = 9998; RPC.setProtocolEngine(conf, AddProtocolPB.class, ProtobufRpcEngine.class); RPC.Server server = new RPC.Builder(conf) .setProtocol( AddProtocolPB.class) .setInstance((BlockingService)Add.AddService.newReflectiveBlockingService(new AddProtocolServerSidePB(new AddImpl()))) .setBindAddress(ADDRESS) .setPort(port).setNumHandlers(1) .setVerbose(true) .build(); server.start(); }}
先执行ProtoRpcServer监听端口。
再执行ProtoRpcClient执行客户端程序。
0 0
- Hadoop RPC协议之 ProtobufRpcEngine
- hadoop RPC协议之WritableRpcEngine
- Hadoop源码解析之RPC协议
- Hadoop之RPC协议的使用
- 【hadoop】 2005-RPC协议
- Hadoop之RPC简单使用(远程过程调用协议)
- Hadoop之RPC概述
- Hadoop学习之RPC
- hadoop之RPC
- Hadoop 2.2 RPC 协议源码分析
- 学习Hadoop第九课(理解RPC协议)
- Hadoop源码之RPC机制
- Hadoop之RPC架构分析
- Hadoop学习笔记之RPC
- Hadoop之RPC简单实现
- Hadoop源代码分析之Hadoop RPC(RPC和Client)
- Hadoop源代码分析之Hadoop RPC(Server)
- Hadoop RPC源码分析之Client
- const char*, char const*, char*const的区别
- android典型代码系列(十五)------字节转KB_MB_GB方法
- LIGHTOJ-1116 - Ekka Dokka
- Motion Partition
- poj3233 Matrix Power Series
- Hadoop RPC协议之 ProtobufRpcEngine
- 服务器集群视频云的特点应该注意哪些?
- plsql developer调试触发器
- java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity
- 发送邮件(java)
- PickView选中某一行的字体变化
- MyBatis学习笔记(四)表字段名与实体类属性名不相同解决
- 高并发的epoll+线程池,业务在线程池内
- IOS 高斯模糊 (毛玻璃效果 UIVisualEffect)