IDL和生成代码分析
IDL:接口描述语言
这里使用thrift-0.8.0-xsb这个版本来介绍IDL的定义以及简单实例分析。
1. namespace 定义包名
2.struct 结构体,定义服务接口的参数和返回值用到的类结构。基本类型不需要使用struct.
3.service 定义接口:demo.thrift
1 namespace java com.thrift.demo 2 3 struct Parameter { 4 1: required i32 id; 5 2: required string name; 6 } 7 8 service DemoService { 9 i32 demoMethod(1:string param1, 2:Parameter param2, 3:map<string,string> param3); 10 }
命令行执行 thrift -r --gen java demo.thrift,生成gen-java文件夹,在eclipse下创建名为gen-java的工程,然后将生成的gen-java放入eclipse的工作空间,即可关联成为一个gen-java工程(也可以自定义一个java工程,然后将生成的代码导入,此时只有JRE-System Library,java文件均报错。手动创建一个新的文件夹将Thrift工程需要的jar包以及libthrift-0.8.0.jar放置到文件夹下,同时在Java Build Path中添加引用。我这里直接使用eclipse自动fixed setup 导入,然后就出现了Refferenced Libraries文件夹,文件夹中包含了libthrift-0.8.0.jar等需要的jar包。如下图所示:
可见:每个struct会单独生成一个类,每个service也会生成一个类。下面着重看下生成的Demoservice.java。
如上图所示,Demoservice.java中主要由5部分组成:
1.接口类型:Iface(同步调用) AsyncIface(异步调用)
2.客户端类型:Client AsynClient
3.方法参数封装类类型:demoMethod_args (方法名_args)
4.返回结果封装类类型:demoMethod_result(方法名_result)
5.Processor