Skip to content
Roy edited this page Nov 7, 2017 · 4 revisions

通讯协议

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的结构如下:

  1. 4个字节的消息数据长度(可能包括属性)
  2. 4个字节的check sum
  3. 8个字节的消息id
  4. 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