美文网首页
跟我学Thrift 2:Hello Thrift

跟我学Thrift 2:Hello Thrift

作者: whplcyz | 来源:发表于2018-11-24 17:18 被阅读0次

先从一个简单的Hello Thrift开始了解Thrift的工作原理和流程。

Hello.thrift

声明了一个service Hello,它有一个方法 hello,参数是一个string,返回值也是一个String

namespace java com.whp.demo.thrift

service Hello {

string hello(1:string para)

}

编译生成Java模板代码

然后调用thrift生产java版本的模板代码(也可以称为胶水代码),会在当前目录下生产一个gen-java的目录,里面根据namespace生产对应package level的java文件:com.whp.demo.thrift.Hello.java

里面包含如下几个关键接口、类:

1.Iface:service的接口文件

2.AsyncIface: Iface的异步版本,需要传入一个Callback handler

3.Client:调用端的模板代码,它实现了Iface接口。它是调用服务端接口的桥梁。需要指定Protocol

4.Processor:service的代理类

5.AsyncProcessor: servcie的代理类的异步实现

6.TServer.Args:  即Server的参数类。用于包装processor、protocol、transPort

可以看出模板代码封装了客端调用代码Client(同步和异步),服务器端Processor(同步和异步),IFace(同步和异步),服务器端初始化参数。

调用(Client)端 

初始化Transport(设置端口,timeout时间),Protocol(可以是binary,compact,json三种实现)。Client封装了服务接口的调用。

Transport transport =new TSocket("localhost",9898,30000);

TProtocol protocol =new TBinaryProtocol(transport);

Hello.Client client =new Hello.Client(protocol);

transport.open();

String result = client.hello("Thrift");

服务器(Server)端

包含server的模式: 可以Simple(单线程),TThreadPoorServer, TThreadedSelectorServer

以及processor, transport, protocol的设置

TProcessor tProcessor =new Hello.Processor(new HelloServiceImpl());

TServerSocket serverTransPort = new TServerSocket(9898);

TServer.Args tArgs =new TServer.Args(serverTransPort);

tArgs.processor(tProcessor);

tArgs.protocolFactory(new TBinaryProtocol.Factory());

TServer server =new TSimpleServer(tArgs);

server.serve();

关于Server,Processor,Protocol,Transport的层级关系可以参考初识Thrift

例子代码在这里:MyThrift

接下来会分析不同的Server、Processor、Protocol对用场景

相关文章

网友评论

      本文标题:跟我学Thrift 2:Hello Thrift

      本文链接:https://www.haomeiwen.com/subject/dztsqqtx.html