打造自己的 grpc 公用服务接口

创建一个 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 }
发布了34 篇原创文章 · 获赞 1 · 访问量 7886

猜你喜欢

转载自blog.csdn.net/landiyaaa/article/details/102482601