Node.js rpc错误:代码=已取消描述=上下文已取消

Node.js rpc错误:代码=已取消描述=上下文已取消,node.js,go,protocol-buffers,grpc,Node.js,Go,Protocol Buffers,Grpc,我运行3个docker容器,比如: container-1(node.js应用程序) 集装箱-2(Golang应用) 集装箱-3(Golang应用) 所有这些容器都使用gRPC进行通信 我正在container-1中进行一元RPC(请求/应答)调用,该调用调用container-2的一个方法。此方法执行各种操作并调用container-3的许多一元RPC(~20) 在整个过程中,有时我会出现以下错误(注意:并非每次,即使我的输入数据也是相同的): rpc错误:code=cancelled des

我运行3个docker容器,比如:

  • container-1(node.js应用程序)
  • 集装箱-2(Golang应用)
  • 集装箱-3(Golang应用)
  • 所有这些容器都使用gRPC进行通信

    我正在container-1中进行一元RPC(请求/应答)调用,该调用调用container-2的一个方法。此方法执行各种操作并调用container-3的许多一元RPC(~20)

    在整个过程中,有时我会出现以下错误(注意:并非每次,即使我的输入数据也是相同的):

    rpc错误:code=cancelled desc=context cancelled

    无论何时出现错误,它都会发生在最近4-5次RPCs调用中的一次(在container-2中)

    有一件事我注意到,这个错误发生在我启动流程后约1分钟。

    所以

  • 取消上下文后,可能会有一些默认上下文时间。如果是,我如何增加时间
  • 请任何人向我解释一下,在Golang的上下文gRPC中,我是否遗漏了什么
  • 多谢各位

    编辑:

    以下是显示如何连接和调用RPC的主要代码:

    // load proto
    const proto = await grpc.load(PROTO_PATH);
    
    // connect to service
    const SERVICE = new proto.types.MyService(SERVICE_ADDR, grpc.credentials.createInsecure(), {
        "grpc.keepalive_time_ms"             : (5 * 60 * 1000),
        "grpc.keepalive_permit_without_calls": 1,
    })
    
    // calling RPC
    SERVICE.sync({
        id:     Id,
    }, (err, resp) => {
        if (err) {
            return reject(err);
        }
    
        if (!resp.success) {
            return reject(new Error(`Action error: ${resp.intended_action}: ${resp.reason}`));
        }
    
        resolve(resp.intended_action);
    });
    

    这回答了你的问题吗@blackgreen-我没有创建任何上下文,此上下文是grpc go的RPC方法的一部分(作为第一个参数)。当您说我在container-1中进行一元RPC(请求/回复)调用,该调用调用container-2的方法时,您[=您控制下的代码]可能正在创建上下文。不幸的是,除非你向我们展示更多的代码,否则没有人能告诉我们sure@blackgreen-我已经编辑了帖子并添加了代码要点。有帮助吗?