通讯协议
Meta是通讯是走TCP长连接,它的的协议是基于文本行的协议,类似memcached的文本协议。通用的协议格式如下
command params opaque\r\n
[body]
其中command
为协议命令,params
为参数列表,而opaque
为协议的自增序列号,用于请求和应答的映射。客户端发送协议的时候需要自增此序列号,而服务端将拷贝来自客户端的序列号并作为应答的序列号返回,客户端可根据应答的序列号将应答和请求对应起来。body
为协议体,可选,在协议头里需要必须有字段指明body长度。
详细协议介绍
put
put topic partition value-length flag [transactionKey]\r\n[body]
发送消息协议,topic为发送的消息主题,partition为发送的目的分区,value-length为发送的消息体长度,flag为消息标识位,transactionKey为事务标识符,可选。示范:
put meta-test 0 5 0 1\r\nhello
get
get topic group partition offset maxSize\r\n
消费者拉取消息协议,topic为拉取的消息主题,group为消费者分组名称,partition为拉取的目的分区,offset为拉取的起始偏移量,maxSize为本次拉取的最大数据量大小。示范:
get meta-test example 0 1024 512 1\r\n
data
value total-length opaque\r\n data
get请求返回的应答,total-length表示返回的数据的总长度。
其中data的结构如下:
- 4个字节的消息数据长度(可能包括属性)
- 4个字节的check sum
- 8个字节的消息id
- 4个字节的flag
消息数据,如果有属性(flag的最低位为1,即 (flag & 0x1) == 1 ),则为:
- 4个字节的属性长度+ 消息属性 + payload
否则为:
- payload
示范:
get请求,得到一个没有attribute,内容是"FFFF"的消息:
value 24 -214748 \r\n \x00\x00\x00\x04 \x52\xb0\x25\xa9 \xb4\x1a\xda\x94\xd0\x00\x00\x00 \x00\x00\x00\x00 FFFF
get请求,得到一个attribute为"AAA",内容是"FFFF"的消息:
value 24 -214748 \r\n \x00\x00\x00\x0b \x55\x17\x9a\x47 \xb4\x1a\xdc\x98\x86\xc0\x00\x00 \x00\x00\x00\x01 \x00\x00\x00\x03 AAAFFF
result
result code length\r\n
通用应答协议,如返回请求结果。code为应答状态码,采用与HTTP应答状态码一样的语义。length为协议体长度,示范:
result 200 0 1\r\n
offset
offset topic group partition offset\r\n
查询离某个offset的最近有效的offset,topic为查询的消息主题,group为消费者分组名称,partition为查询的分区,offset为查询的offset,示范:
offset meta-test example 0 1024 1\r\n
stats
stats [item]\r\n
查询服务器的统计情况,item为查询的项目名称,如realtime(实时统计),具体的某个topic等,可以为空。示范:
stats 1\r\n