课后练习:通过 MOSN mecha 完成 brpc 开发
brpc 协议规范
标准 brpc 协议报文格式如下:
0 1 2 3 4 6 8 10 12 14 16
+----+----+------+---+---+---+---+-----+----+----+----+----+-----+-----+------+-----+
| magic | flag | requestID |codec| timeout/status | headerLen | contentLen |
+----+----+------+---+---+---+---+-----+----+----+----+----+-----+-----+------+-----+
| header + content bytes ... ... |
| |
+-----------------------------------------------------------------------------------+
字段说明如下:
字段名 | 大小(Byte) | 说明 |
magic | 2 | 魔法数,固定值:0xbcbc。 |
flag | 1 | 报文标志,取值如下:
|
requestID | 4 | 请求或者响应 ID |
codec | 1 | 序列化编号,固定值:0。 |
timeout | 4 | 超时时间,单位:ms。 flag 取值为 1、3 时生效,代表请求超时时间。请求时该字段需填值。 |
status | 4 | 响应码 flag 取值为 2、4 时有效,代表响应状态码。响应时该字段需填值,和 timeout 共用字段。 |
headerLen | 2 | 代表报文 key-value 键值对长度。 |
contentLen | 2 | 代表消息体长度。 |
header | - | 编码后的格式为键值对字符串,格式为: header 中包含服务调用信息,详情信息参见下方表格。 |
content bytes | - | 为业务报文体,内容不设限制,例如传递字符串。 |
header 中包含的服务调用信息如下:
序号 | 包含 Key | 含义 | 样例 |
1 | interface | 服务调用接口 | com.alipay.core.UserService |
2 | method | 服务调用方法 | userInfo |
brpc 协议调用指南
brpc 的服务端和客户端源码地址如下:
https://github.com/mosn/extensions/tree/master/java-quickstart/java-plugin-quickstart
brpc-server 对应服务端程序,服务端启动监听 7766 端口。
brpc-client 对应客户端程序,客户端启动监听 8080 端口。
brpc 客户端支持 REST API 触发 RPC 调用,命令如下:
curl localhost:8080/invoke
可选 HTTP 参数如下:
service 调用服务 interface,默认为:
com.alipay.core.UserService
。parameter 调用指定参数,格式为:
key=value,...=...
。多个 Key 需使用英文逗号(,)分隔。content 调用 RPC 报文的消息体,RPC 响应回送返回。默认为:
hello world
。ipPort 调用
ip:port
, 默认为:127.0.0.1:2045
,指向 brpc MOSN Client 端口。timeout 调用超时时间(毫秒),默认为:3000 毫秒。如果要 debug 长时间挂住,可以指定更长时间。
示例如下:
curl localhost:8080/invoke\?timeout=6000\&content=yiji\¶meter=user=yiji,age=30
命令行 curl
需要对 ?
、&
增加转译 \
字符, postman 发起调用不需要。
代码会自动生成提供 MOSN 启动后手动执行服务发布、订阅的脚本,在 MOSN 首次启动手动执行即可:
cd ~/go/src/quick-start-practice/configs/codecs/brpc/
bash ./auto_pub_sub.sh
课后练习
请根据前面的学习内容通过 MOSN mecha 完成 brpc 开发。
提示:开发者应关注协议接入解码 header 包含的字段
序号 | 协议要素 | 对应字段 | 样例 |
1 | 服务标识 | interface | com.alipay.core.UserService |
2 | 服务方法 | method | userInfo |
观看以下视频,了解 brpc 协议开发步骤和注意事项: