egg 客户端使用原生 grpc 调用 grpc 接口,并支持在请求中添加 header

客户端调用参考写法

本文主要是对 grpc 客户端的写法进行描述,并有在请求中添加 header 的写法

  1. proto 定义,务必要和服务端定义的一致
syntax = "proto3";
 
package grpcPackage;
 
service grpcServiceName {
  rpc grpcFunction (grpcFunctionInterface) returns (grpcFunctionReplyInterface){}
}
 
message grpcFunctionInterface {
  repeated int64 empIDs = 1;
}
 
message grpcFunctionReplyInterface{
  repeated Member emps = 1;
}
 
message Member {
  string name = 1;
  string userName = 2;
  int64 id = 3;
}
  1. egg 的 grpc 配置
config.grpcConfig = {
    servicePackage: 'grpc 包名(grpcPackage)',
    serviceName: 'grpc 服务名(grpcServiceName)',
    serviceAddress: 'grpc 服务地址',
    servicePort: 'grpc 服务端口',
    protoPath: 'proto 路径(相对路径)',
    interfaceName: 'grpc 请求的函数名(grpcFunction)',
    grpcParam: {
        keepCase: true,
        longs: String,
        enums: String,
        defaults: true,
        oneofs: true,
    },
};
  1. 创建 grpc 对象
// 参数均为配置中心读取的
const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');

const PROTO_PATH = path.join(__dirname, proto_path);
const packageDefinition = protoLoader.loadSync(PROTO_PATH, grpc_param);
const userGrpc = grpc.loadPackageDefinition(packageDefinition)[service_package];
const client = new userGrpc[service_name](
    `${service_address}:${service_port}`,
    grpc.credentials.createInsecure()
);
  1. 向请求中添加 header
// 添加 header
const metadata = new grpc.Metadata();
metadata.add('headerKey1', headerValue1);
metadata.add('headerKey2', headerValue2);
  1. 定义请求函数
// 定义请求函数
const getGrpcFunction = () => {
    return new Promise<EmployeeList>(resolve => {
        client[interface_name](params, metadata, (err, response) => {
            if (err) ctx.logger.info('user.controller.userList.err', err);
            resolve(response);
        });
    });
};

const grpcResponse = await getGrpcFunction();

上述的 grpcResponse 即 grpc 接口返回结果

参考资料

  1. grpc-node-examples
  2. grpc-github
  3. grpc-node-quickstart
  4. grpc 添加 header
  5. gRPC实战–如何在NodeJS中有效使用gRPC流
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值