协议
rpcx的请求和响应使用相同的消息格式。
一个消息包含:
- 头部:4字节
- 消息ID:8字节
- 总大小:4字节,不包含头部大小和本身,uint32类型
- 服务路径大小:4字节,uint32类型
- 服务路径:UTF-8字符串
- 消息方法大小:4字节,uint32类型
- 消息方法:UTF-8字符串
- 元数据大小:4字节,uint32类型
- 元数据:格式:
size
key1
string
size
value1
string
,可以包含多个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
是错误消息。