跨语言跨平台RPC
框架
本文使用apache-thrift:0.12.0版本
C# .net framework:4.6.1
jdk: 11
Java后台框架使用spring boot
准备
下载必须
**thrift**工具
C#安装包依赖
使用NuGet包管理工具,下载安装对应的thrift的包

java导入maven依赖
1 2 3 4 5
| <dependency> <groupId>org.apache.thrift</groupId> <artifactId>libthrift</artifactId> <version>0.12.0</version> </dependency>
|
编写thrift -idl 文件
在安装目录编写一份**.thrift**后缀的文件,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| namespace csharp bubuzi.Rpc namespace java bubuzi.Rpc
typedef i32 int
struct People { 1: int ID; 2: string Name; 3: i16 Age; 4: list<i32> onelist; 5: set<string> oneSet; 6: map<i32,string> oneset; }
service HelloService { void SetPeople(1: People people1); }
service GuidGenService { string getGuid(1:i32 id); }
|
详细语法可参考官网
生成代码
打开命令控制台
1 2
| thrift-0.12.0.exe -r -gen java rpc.thrift # 生成java代码 thrift-0.12.0.exe -r -gen csharp rpc.thrift # 生成c#代码
|
生成代码后,会在路径中生成gen-csharp和gen-java文件夹,内部就是生成的代码
应用启动
C# 客户端调用
1 2 3 4 5 6 7 8 9 10
| TTransport framedTransport = new TSocket("localhost", 9001);
TCompactProtocol compactProtocol = new TCompactProtocol(framedTransport);
HelloService.Client client = new HelloService.Client(compactProtocol);
People people = new People();
client.SetPeople(people);
|
JAVA 服务端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| TServerSocket tServerSocket = new TServerSocket(port,clientTimeout); TServer.Args tArgs = new TServer.Args(tServerSocket);
tArgs.protocolFactory(new TCompactProtocol.Factory());
TProcessor tprocessor = new HelloService.Processor<HelloService.Iface>(new HelloServiceHandler()); tArgs.processor(tprocessor);
TServer server = new TSimpleServer(tArgs); server.serve();
|