0%

跨语言跨平台RPC

跨语言跨平台RPC

框架

本文使用apache-thrift:0.12.0版本

C# .net framework:4.6.1

jdk: 11

Java后台框架使用spring boot

准备

下载必须

**thrift**工具

C#安装包依赖

使用NuGet包管理工具,下载安装对应的thrift的包

image-20220721171654528

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
// 设置端口号和超时时间,创建Transport
TServerSocket tServerSocket = new TServerSocket(port,clientTimeout);
TServer.Args tArgs = new TServer.Args(tServerSocket);

// 为Transport创建Protocol
// 注意,这里的TCompactProtocol和客户端应该保持一致
tArgs.protocolFactory(new TCompactProtocol.Factory());

// 为Protocol创建Processor
TProcessor tprocessor = new HelloService.Processor<HelloService.Iface>(new HelloServiceHandler());
tArgs.processor(tprocessor);

// 创建Server并启动
// 这里使用TSimpleServer,实际情况可用其他实现
TServer server = new TSimpleServer(tArgs);
server.serve();
Donate comment here.