使用ProtocolBuffer实现RPC简单示例01

ProtocolBuffer大家多是使用其强大的序列化功能。但从3.0版本起,官方提供了GRPC作为其RPC功能的扩展。同样可以用于跨语言RPC通讯了哦。其通信架构如下图所示:

grpc_concept

使用ProtocolBuffer+GRPC的时候,首先要先下载ProtocolBuffer、GRPC,各种语言的编译工具及语言支持包,本例主要用到C#和Java。

ProtoBuffer的编译工具:
protoc.exe
可以到github下载

Java的工具及支持包,都可以到mvnrepository下载到
protobuf-java-3.0.0-beta-2.jar
grpc-all-0.13.1.jar
guava-18.0.jar
netty-all-4.1.0.CR1.jar
okhttp-2.5.0.jar
okio-1.6.0.jar
protoc-gen-grpc-java.exe(protoc-gen-grpc-java-0.13.1-windows-x86_32.exe 或 protoc-gen-grpc-java-0.13.1-windows-x86_64.exe)

C#的工具及支持包,都可以到NuGet上下载到
Google.Protobuf.dll(测试时NuGet没有3.0版本,我从github下源码,把源码从CS6.0人肉降级到CS5.0,用VS2013把编译通过)
Grpc.Core.dll
grpc_csharp_ext.dll(32及64版本)
System.Interactive.Async.dll
grpc_csharp_plugin.exe

使用新版本ProtocolBuffer+GRPC的时候,先定义一个接口描述文件,比如我自己写了一个很简单的接口。
JustATest.proto

syntax = "proto3";

option java_package = "com.neohope.protobuf.grpc.test";

package com.neohope.protobuf.grpc.test;

service JustATest {
  rpc Add (AddRequest) returns (AddResponse){}
  rpc SayHelloTo (Person) returns (HelloResponse);
}

message Person {
  enum SexType {
    MALE = 0;
    FEMALE = 1;
    OTHER = 2;
    UNKNOWN = 4;
  }
  
  string name = 1;
  SexType sex = 2;
  int32 age = 3;
}

message HelloResponse {
  string rsp = 1;
}

message AddRequest {
  int32 a = 1;
  int32 b = 2;
}

message AddResponse {
  int32 c = 1;
}

然后,工具分别编译为java及c#语言

#CS
protoc.exe --plugin=protoc-gen-grpc=grpc_csharp_plugin.exe --grpc_out gen-cs -I. --csharp_out gen-cs JustATest.proto

#Java
protoc.exe --plugin=protoc-gen-grpc=protoc-gen-grpc-java.exe --grpc_out gen-java -I. --java_out gen-java JustATest.proto

Leave a Reply

Your email address will not be published. Required fields are marked *

*