我们知道系统间的通信需要提前设定一定的规则,只有各自双方都遵守这个规则,才能相互间通信,如果每个都有自己的规则,则就无法通信。thrift框架规定了自己的协议,这个协议通过编写thrift文件进行设定,其实就是服务端提供服务的接口。
我们首先了解一下这个thrift的协议怎样写:
案例:
namespace java cn.stq.thrift include "../Ex.thrift"
const i32 a=5
struct User{ 1:string realName, 2:string loginName, 3:string birthday } service UserService { list<User> getUser() throws (1:Ex.thriftDataException dataEx,2:Ex.thriftBusinessException businessEx,3:Ex.thriftSystemException systemEx) }
namespace:说明命名空间, java:说明生成java代码,如果要生成c#代码,则改成csharp,cn.stq.thrift:说明生成的程序所在的包
const:用于修饰常量的。
include "../Ex.thrift":说明引入的thrift文件。Ex.thrift:表示自定义的异常文件
struct:表示结构体,这样我们就可以引入java中的JavaBean了
service:表示向外界提供的服务。
thrift的所支持的数据类型:
1)基础数据类型:
boolean类型,值为true或false
byte类型
i16类型 java中对应char
i32类型 java中对应的int
i64类型 java中对应的long
string类型 java中对应的String
double类型 java对应的浮点型double
2) 容器
list类型 java对应的List
set类型 java对应Set
map类型 java对应的Map
3)枚举
例如:
enum Grade{ M1,M2,M3,H1,H2,H3,MS,HS }
4)结构体 可以定义像java的javaBean
例如:
struct User{ 1:string realName, 2:string loginName, 3:string birthday }
服务:这是thrift文件的重点了,服务就是服务端对外提供的功能了,如果你想对外提供什么功能,就可以在这添加服务了,但是thrift文件时静态文件,当生成具体的代码后,就无法改变了,这也是thrift框架的一个缺点吧。