协议
rpcx的请求和响应使用相同的消息格式。
一个消息包含:
- 头部:4字节
- 消息ID:8字节
- 总大小:4字节,不包含头部大小和本身,uint32类型
- 服务路径大小:4字节,uint32类型
- 服务路径:UTF-8字符串
- 消息方法大小:4字节,uint32类型
- 消息方法:UTF-8字符串
- 元数据大小:4字节,uint32类型
- 元数据:格式:
sizekey1stringsizevalue1string,可以包含多个e=key,value - 负载大小:4字节,uint32类型
- 负载:字节切片
#4+#6+#8+#10 + (4 + 4 + 4 + 4)必须等于#3
servicePath、serviceMethod和元数据中的key value
必须是UTF-8字符串。
rpcx使用元素大小+元素的格式来定义一个元素。这类似于TLV,但是没有使用类型因为元素类型是UTF-8字符串。
size使用大段格式(int、int64、uint32等)

- 第一个字节必须是
0x08。它是一个魔术数字。 - 第二个字节是
version,当前版本是0。 - 消息类型可以是: 0:请求 1:响应
- 心跳:bool类型。该消息是否是心跳消息
- 单向:bool类型。是否需要响应。
- 压缩类型: 0:不压缩 1:Gzip压缩
- 消息状态类型:指明响应是一个错误消息或者正常消息。
- 序列化类型: 0:使用原始字节 1:JSON 2:Protobuf 3:MessagePack
如果一个服务处理请求出现错误,它可以返回一个错误。它设置响应的MessageStatusType为1(ERROR),并设置响应元数据中的错误消息。错误的key是rpcx-error,value是错误消息。