文档

课后练习:通过 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:表示请求。

  • 1:表示响应。

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 协议开发步骤和注意事项: