rpc包更换

原因

  1. 精简rpc包,剔除mq功能
  2. 使用egg agent,支持多worker启动(支持多worker意义不大,egg 3.0的milestone对docker的singleprocess会做优化,到时候再根据情况做调整)
  3. 提供尽量方便的配置性,支持开发自定义proto文件的同时不需要格外增加代码(屏蔽掉内部实现)

设计点记录

client

  • call

连接断开: 连接断开后直接抛错,删掉记录的client,等待下次调用再发起连接,因为只有调用时才能执行建立连接,直接用调用方法重试容易出现死循环

报错: 通过判断response.body.code<0,创建error,reject error

  • stream

连接断开: 连接断开后重试连接,通过监听error事件重试

server

启动失败: 设计只支持发生在申请端口时,直接reject error

保存连接对应的client

1
2
3
const key = svcName + funcName + that._getRid();
that.callHandle.set(key,client)

触发rpcData时带上key

设置传输包大小

改动范围

fx-rpc

启动rpc服务,处理client发送的请求,调用本地方法

传输格式
1
2
3
4
5
6
7
8
9
10
11
syntax = "proto3";
package fgrid;
service Call {
rpc Call (body) returns (body) {}
}
message body {
string body = 1;
}

middle

client发送rpc请求,格式参考部分JSON-RPC

1
2
3
4
5
{
method: targetArgs.join('.'),
param: [ ...args, ctx.rpcCtx ],
}