创建一个 grpc client 实例
// 加载proto文件,生成一个Definition
const PROTO_PATH = path.join(__dirname, '../protos/rpc.proto')
const packageDefinition = protoLoader.loadSync(PROTO_PATH, {
defaults: true,
keepCase: true,
includeDirs: [path.join(__dirname, '../protos')]
})
// 加载该Definition,获取一个中间实例
const { admin } = (grpc.loadPackageDefinition(packageDefinition).credit as any).risk
// 以此生成client
const client = new admin.RiskAdmin(
grpcAddress,
grpc.credentials.createInsecure(),
grpcOptions // 大小限制等{grpc.max_send_message_length': 1024 * 1024 * 16,...}
)
// 返回client实例
return client
据此获取一个 ServiceCaller
this.adminServiceCaller =
promisify(gprcClient.riskAdminService.bind(gprcClient))
构造用于外部调用的call方法
// 构造接口参数
const req: RiskAdminReq = {
RiskAdminReqHeader: {
Cmd: cmd,
Token: profile.email,
Version: version,
AppID: appID,
ReqTime: Math.floor(Date.now() / 1000),
ReqServer: 'risk api server',
FlowNo: `${appID}-${version}`
},
Params: Buffer.from(JSON.stringify(noEmptyParams))
}
// 关键步骤:调用ServiceCaller进行通信,获取返回数据
const res = await this.adminServiceCaller(req)
// 返回数据
return { header: res.RiskRspHeader, data: res.Data }