微服务通讯协议Thrift的简单化应用

本文探讨了Thrift协议在.NET Core下的开发痛点,提出了一种简化方案,即将Thrift结构体作为根基发送自定义JSON格式内容,以此解决IDL文件与开发语言割裂的问题,同时保持多语言支持和大部分Thrift效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Thrift协议最初由Facebook公司开发,2008年加入Apache开源项目,其通过IDL接口定义语言来实现跨语言服务开发,其支持的开发语言广泛,包括C ++,Java,Python,PHP,Ruby,Erlang,Perl,Haskell,C#, Cocoa,JavaScript,Node.js,Smalltalk,OCaml和Delphi等语言。

 

Thrift正常开发步骤

  1. 下载Apache Thrift

    要开始使用,请下载 Thrift的副本()。

  2. 构建并安装Apache Thrift编译器

    然后,您需要构建 Apache Thrift编译器并进行安装。有关此步骤的帮助,请参阅安装Thrift指南。

  3. 编写.thrift文件

    安装Thrift编译器后,您需要创建一个thrift文件。此文件是由thrift类型和Services 组成的接口定义。您在此文件中定义的服务由服务器实现,并由任何客户端调用。Thrift编译器用于将Thrift文件生成为源代码,由不同的客户端库和您编写的服务器使用。从thrift文件运行生成源

    thrift --gen <language> <Thrift filename>

     

Thrfit的IDL文件例子

Thrift支持许多种类型:

下面是一个Thrift的定义例子:

struct SharedStruct {

1: i32 key

2: string value

}

service SharedService {

SharedStruct getStruct(1: i32 key)

}

.net core 下开发痛点

生成的IDL文件和开发语言下定义的类,是割裂的,需要先定义出IDL,然后利用工具生成相应的class类,在大公司应该不是问题,因为开发人员的素质和水平都非常高,很容易学习新的东西,并且步伐一致的往前走。然而中小型公司内,如果领导架构的不是一个强势机构,会很容易被开发人员抱怨死的,因此为了避免这种痛,那也只有忍痛割爱,舍弃Thrift协议IDL带来的好处——效率。

采用Json格式传输是一个不错的选择,因为其序列化和反序列化的效率都不错,并且极容易被接受,虽然Thrift也支持json,但是仍然绕不开IDl这一关,因此我们需要利用Thrfit的通讯层,定义一个既定格式的IDl,绕过IDL文件的定义。

为了实现这个目标,先来看下Thrift的通讯协议定义:

既然Thrift的Json格式并不能完成我们的目的,那只好选用 TBinaryProtocol+TFramwdTransport 方式了。

Thrift协议简化的核心

简言之:以Thrift的结构体为根基发送我们自定义的Json格式内容信息。

因此目的一旦确定,可以做出如下简化(以下代码为Thrift的C#版sdk支持):

TStruct struc = new TStruct("MyDefineArgs");

oprot.WriteStructBegin(struc);

TField field = new TField();

field.Name = "MyDefineArgs";

field.Type = TType.String;

field.ID = 1;

oprot.WriteFieldBegin(field);

// 重点来了!这里就是我们定义的json字符串,

oprot.WriteString(MyDefineArgs);

oprot.WriteFieldEnd();

发送端就这么简化了,那接收端就同样处理吧。这样Thrift灵活多变的IDL就被简化为一个生硬不变的结构体,内容就是Json字符串了。如此简化后,微服务中的定义就是 我们的Json字符串映射的类,因此可以灵活适应所有的c#类定义了(只要Json支持,都可以)。

简化的劣势

  1. 失去了Thrift的IDL的灵活性,

  2. 失去了部分效率

简化后保留的优势

  1. 继续支持多语言

  2. 保留了80%的Thrift的效率

  3. 开发接口方便快捷,仅需定义 c#原生类,不需要任何标记。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

webmote

如果能帮到你,请支持下博主

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值