最近在学习分布式系统架构,很多书中讲到RPC的时候,都提到了Thrift,于是就专门来看看到底Thrift是什么。Apache Thrift是一个工具,他可以帮助构建可扩展的,分布式的系统,可以跨平台和跨语言。最初是Facebook开发为内部使用的,现在开源了,由Apache基金会支持。

自己经过学习后,这里写一个简单的例子,加深一下理解。

这个实例的项目结构图如下:

1.编写服务定义文件

service Product{
    string SayHello(),
    i32 Add(1:i32 num1,2:i32 num2)
}

2.在cmd下用thrift命令编译服务定义文件,生成c#代码:
thrift –gen csharp TestService.thrift
注意:我使用的是windows 10系统,这里需要去官网下载thrift.exe,然后在环境变量中加入其存放路径。

3.在服务端和客户端都引用生成的代码。

4.在服务端和客户端都安装thrift的nuget包:

<package id="ApacheThrift" version="0.9.3" targetFramework="net46" />

5.服务端
首先实现编译器自动生成的代码类

public class ProductService:Product.Iface
{
    public string SayHello()
    {
        return $"Hello,time is {DateTime.Now}";
    }
    public int Add(int num1, int num2)
    {
        return num1 + num2;
    }
}

然后在程序启动的时候,配置监听端口、传输协议等设置:

static void Main(string[] args)
{
    try
    {
        var handler = new ProductService();
        var processor = new Product.Processor(handler);
        var serverTransport = new TServerSocket(9090);
        var server = new TThreadPoolServer(processor, serverTransport);
        Console.WriteLine("Starting the server...");
        server.Serve();
    }
    catch (Exception x)
    {
        Console.WriteLine(x.StackTrace);
    }
    Console.WriteLine("done.");
}

6.客户端
做好监听端口、传输协议等配置,创建客户端对象,然后就可以使用服务了。

static void Main(string[] args)
    {
        try
        {
            var transport = new TSocket("localhost", 9090);
            var protocol = new TBinaryProtocol(transport);
            var client = new Product.Client(protocol);
            transport.Open();
            try
            {
                Console.WriteLine(client.SayHello());
                Console.WriteLine($"2+3={client.Add(2, 3)}");
            }
            catch (Exception e)
            {
                transport.Close();
            }
        }
        catch (TApplicationException x)
        {
            Console.WriteLine(x.StackTrace);
        }
        Console.ReadLine();
    }
}

7.运行程序
先启动服务端,输出如下:

Starting the server...

然后启动客户端,输出如下:

Hello,time is 2017/6/19 10:48:22
2+3=5

源代码下载:ThriftTest.rar

发表评论

电子邮件地址不会被公开。 必填项已用*标注