课后练习:通过 MOSN mecha 完成 xrpc 开发
更新时间:
xrpc 协议规范
以下为标准 xrpc 协议报文格式:
固定 10 字节报文长度 + XML 文本,当字符串报文长度不足 10 位时,用前缀 0 补齐。XML 文本格式如下:
<Service>
<Header>
<ServiceCode> ... </ServiceCode>
<ExternalReferenceId> ... </ExternalReferenceId>
<RequestFlag>...</RequestFlag>
<Response>
<ReturnCode>...</ReturnCode>
<ReturnMessage>...</ReturnMessage>
</Response>
</Header>
<Body>
<key> ... </key>
</Body>
</Service>
Service 内部包含 Header 和 Body, Header 包括任意多个 Key。
说明
当请求异常时(MOSN 劫持),会在返回头 <Header> 中插入 <Response> 标签指明失败原因。
xrpc 中 Header 包含服务调用信息:
序号 | 包含 Key | 含义 | 样例 |
---|---|---|---|
1 | ServiceCode | 服务调用接口 | CIMT000080 |
2 | ExternalReferenceId | 服务请求 ID(string 类型) | 2022-03-31,19:35:1648726547 |
3 | RequestFlag | 标识请求响应:
| 0 |
请求报文样例如下:
0000000238<Service>
<Header>
<ServiceCode>CIMT000080</ServiceCode>
<ExternalReferenceId>2022-03-31,19:35:1648726547</ExternalReferenceId>
<RequestFlag>0</RequestFlag>
</Header>
<Body>
<userId>yiji</userId>
</Body>
</Service>
正常响应报文样例:
0000000299<Service>
<Header>
<ServiceCode>CIMT000080</ServiceCode>
<ExternalReferenceId>2022-03-31,19:35:1648726547</ExternalReferenceId>
<RequestFlag>1</RequestFlag>
</Header>
<Body>
<userId>yiji</userId>
<title>developer</title>
<address>hangzhou</address>
</Body>
</Service>
xrpc 协议调用指南
xrpc 的服务端源码地址如下:
https://github.com/mosn/extensions/tree/master/java-quickstart/java-plugin-quickstart
xrpc-server 对应服务端程序,服务端启动监听 7755 端口。
xrpc 没有客户端应用程序,通过 Shell 脚本模拟客户端发起请求。
xrpc 客户端 Shell 请求模板(reqest_template.txt)如下:
<Service>
<Header>
<ServiceCode>CIMT000080</ServiceCode>
<ExternalReferenceId>EXT_REF</ExternalReferenceId>
<RequestFlag>0</RequestFlag>
</Header>
<Body>
<userId>yiji</userId>
</Body>
</Service>
代码自动生成提供 MOSN 启动后手动执行服务发布/订阅的脚本,您在 MOSN 首次启动手动执行即可:
cd ~/go/src/quick-start-practice/configs/codecs/xrpc/
bash ./auto_pub_sub.sh
课后练习
请根据前面的学习内容通过 MOSN mecha 完成 xrpc 开发。
提示:开发者应关注 xrpc 协议接入解码插入 header 的字段:
序号 | 协议要素 | 对应字段 | 样例 |
---|---|---|---|
1 | 服务标识 | ServiceCode | CIMT000080 |
2 | 请求类型 | RequestFlag | 0 |
观看以下视频,了解 xrpc 协议开发步骤和注意事项:
文档内容是否对您有帮助?