存档在 ‘thrift’ 分类

跨语言RPC框架Hessian、Thrift、Protocol Buffer之间的选择

2016年9月1日

总结在几者之间选择的考量:
1. 如果你不需要很多语言相互调用, 希望保持清晰的Java接口代码(无任何业务不相关的接口继承和方法,属性定义),减少开放工作量,推荐Hessian。
2. 如果你的系统之间传输的数据量不是很大(<2M都不算大), 推荐Hessian。 3. 如果需要支持大数据量的传输,多语言调用,极高的并发支持,推荐使用thrift/protocol buffer。

Thrift相关资源

2016年8月15日
  • http://www.micmiu.com/soa/rpc/thrift-sample/
  • http://blog.csdn.net/andy_yf/article/details/7396373
  • http://blog.csdn.net/zhu_tianwei/article/details/44002721

Thrift的数据类型

2016年8月14日

1.基本类型(括号内为对应的Java类型):
bool(boolean): 布尔类型(TRUE or FALSE)
byte(byte): 8位带符号整数
i16(short): 16位带符号整数
i32(int): 32位带符号整数
i64(long): 64位带符号整数
double(double): 64位浮点数
string(String): 采用UTF-8编码的字符串

2.特殊类型(括号内为对应的Java类型):
binary(ByteBuffer):未经过编码的字节流

3.Structs(结构):
struct定义了一个很普通的OOP对象,但是没有继承特性。

struct UserProfile {
1: i32 uid,
2: string name,
3: string blurb
}

如果变量有默认值,可以直接写在定义文件里:

struct UserProfile {
1: i32 uid = 1,
2: string name = "User1",
3: string blurb
}

4.容器,除了上面提到的基本数据类型,Thrift还支持以下容器类型:
list(java.util.ArrayList):
set(java.util.HashSet):
map(java.util.HashMap):

用法如下:

struct Node {
1: i32 id,
2: string name,
3: list<i32> subNodeList,
4: map<i32,string> subNodeMap,
5: set<i32> subNodeSet
}

包含定义的其他Object:

struct SubNode {
1: i32 uid,
2: string name,
3: i32 pid
}
struct Node {
1: i32 uid,
2: string name,
3: list<subNode> subNodes
}

5.Services服务,也就是对外展现的接口:

service UserStorage {
void store(1: UserProfile user),
UserProfile retrieve(1: i32 uid)
}