C#使用Thrift作为RPC框架入门(一)


前言

本文将介绍由 Facebook 开发的远程服务调用框架 Apache Thrift,它采用接口描述语言定义并创建服务,支持可扩展的跨语言服务开发,所包含的代码生成引擎可以在多种语言中,如 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk 等创建高效的、无缝的服务,其传输数据采用二进制格式,相对 XML 和 JSON 体积更小,对于高并发、大数据量和多语言的环境更有优势。本文将详细介绍 Thrift 在C#语言下的使用方式,并且提供丰富的实例代码加以解释说明,帮助使用者快速构建服务。

完善开发工具

通过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 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;
}

当定义完描述文件后,我们通过如下cmd命令生成代码文件:

thrift-0.12.0.exe -r -gen csharp People.thrift

我们先要通过cd 将当前路径跳转到thrift-0.12.0.exe所在的路径

示例

我定义了了一个描述文件,如下:

namespace csharp WpfApp1.ceshi
include "pe1.thrift"

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: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,是服务端使用的类。

结尾

这篇文件我们讲了从0到1使用thrift框架的方法,也讲了一些该框架的基本知识,接下来的文件,我们将通过一个示例具体讲解一下service指令代码生成的代码的具体含义和使用方法

文章来源:https://www.cnblogs.com/ykMAUI/p/15595454.html

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:Elastic AMP监控.NET程序性能
下一篇:【荐】开源Winform控件库:花木兰控件库
评论列表

发表评论

评论内容
昵称:
关联文章

C#使用Thrift作为RPC框架入门()
C#使用Thrift作为RPC框架入门(三)之三层架构
C#使用Thrift作为RPC框架实战(四)之TSocket
C# Abp框架入门系列文章(
ASP.NET MVC快速入门
C# 多线程入门系列(
WPF 使用 Silk.NET 进行 DirectX 渲染入门
Identity Server 4到今年年底就停止支持了,试一下使用Orchard Core 作为认证服务
ASP.NET+MVC入门踩坑笔记 () 创建项目 项目配置运行 以及简单的Api搭建
话说C#程序员人手个ORM
YESWin Winform开发框架 代码生成器使用
C# 多线程入门系列(三)
C# 多线程入门系列(二)
YES.PlanManage 款强大的 .NET 定时计划管理 服务框架
C# CefSharp的使用
《步步入门》 .NET 6 部署到Linux
C#爬虫:使用Selenium,Selenium配置指南
C# ASP.NET Core开发学生信息管理系统(
ABP VNext框架基础知识介绍(1)--框架基础类继承关系
《步步入门》.NET6在Linux下以守护进程方式运行

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码