这篇文章主要讲解了“C#怎么使用Thrift作为RPC框架”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#怎么使用Thrift作为RPC框架”吧!
完善开发工具
通过nuget在vs2019中安装thrift
在项目中引用右键点击管理Nuget程序包,在打开的界面输入thrift,如下图:
我们选择ApacheThrift这一项进行安装,安装后,在我们项目里有Thrift45.dll的引用,如下图:
下载thrift代码生成工具
thrift是支持异构语言、异构平台的通信开发RPC框架,它通过中间语言IDL进行描述你要定义的结构、类、服务等,并通过代码生成工具生成各个语言上对应的代码。
接下来,我们进入Apache网站Thrift项目下载Thrift代码生成工具,如下图:
我们把下载的这个exe文件放到我们项目的根目录下,以备后用,如下图:
至此,关于thrift的开发工具,我们已经准备完毕,接下来来编写thrift接口描述文件
thrift描述文件
thrift提供的接口描述文件是以thrift结尾的格式文件,我们来解释一下这种IDL的语法,
它提供了基础类型的定义,包括bool、i16、i32、i64、double、string
enum
Struct 对一些基础类型的封装,对应C#中Class字段
还有一些集合的定义,包含 set<> 对应C#中的HashSet,是一种唯一元素的集合(Thrift框架自己定义了THashSet类型与之相对应);list<>对应C#中的List<>;map<K,V>对应C#的Dictionary<K,V>
service 这个是thrift的重点,它是一些方法集合,thrift会根据这个定义生成客户端代码和服务端代码
exception 对应C#中的Exception类型
thrift关于类型的定义以及示例代码请打开这个网址:IDL描述
在IDL描述文件中,Thrift除了对类型的定义外,我们还需要记住一下知识点:
namespace 在描述文件的头部定义。 以当前文件为根目录,生成多级目录;在生成的代码上添加namespace命名空间。代码如下:
namespace csharp WpfApp1.ceshi
include 在描述文件的头部定义。 用该命令包含其他thrift描述文件,当编译生成代码时也会编译include指定的thrift文件。代码如下:
include "pe1.thrift"
使用方法,pe1.thrift文件定义如下:
struct pe1{ 1: i32 id;}
在其他文件中,引入上述文件,定义如下:
include "pe1.thrift"service GuidGenService{ string getGuid(1:pe1.pe1 pe1);}
typedef 类型定义命令,将thrift支持的类型定义一个别名。代码如下:
typedef i32 intstruct People{1: int ID;2: string Name;3: i16 Age;4: list<i32> onelist;5: set<string> oneSet;6: map<i32,string> oneset;}
当定义完描述文件后,我们通过如下cmd命令生成代码文件:
thrift-0.12.0.exe -r -gen csharp People.thrift
我们先要通过cd 将当前路径跳转到thrift-0.12.0.exe所在的路径
示例
我定义了了一个描述文件,如下:
namespace csharp WpfApp1.ceshiinclude "pe1.thrift"typedef i32 intstruct 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:pe1.pe1 pe1);}
我们通过上述命令执行后,生成的代码结构如下图:
我们打开people.cs可以看到struct people生成了如下代码:
namespace WpfApp1.ceshi{ #if !SILVERLIGHT [Serializable] #endif public partial class People : TBase { private int _ID; private string _Name; private short _Age; private List<int> _onelist; private THashSet<string> _oneSet; private Dictionary<int, string> _oneset; .....
这里需要注意一下people类的命名空间,这和我们上文讲的时一致的。
我们定义的service GuidGenService生成了如下代码:
该类是我们使用该框架的重点,它给我们生成了客户端和服务器端代码,从图中我们可以看该文件下生成了两个接口ISync和Iface,前者是同步方法,后者生成的是异步调用方法,接下来是一个供我们客户端调用的类,它继承了iface接口,而iface又继承了ISync接口;再往下看是一个Processor,是服务端使用的类。
感谢各位的阅读,以上就是“C#怎么使用Thrift作为RPC框架”的内容了,经过本文的学习后,相信大家对C#怎么使用Thrift作为RPC框架这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!