rpc 错误:代码 = 已取消 desc = 上下文已取消

Vin*_*pta 5 go protocol-buffers node.js grpc

我正在运行 3 个 docker 容器,比方说:

  1. container-1(node.js 应用程序)
  2. 容器-2(Golang 应用程序)
  3. container-3(Golang 应用程序)

所有这些容器都使用 gRPC 进行通信。

我正在容器 1 中执行一元 RPC(请求/回复)调用,该调用调用容器 2 的方法。该方法执行各种操作并调用container-3的大量一元RPC(~20)。

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

rpc error: code = Canceled desc = context canceled

每当错误出现时,它都会发生在最后 4-5 个 RPC 调用之一(在 container-2 中)。

我观察到的一件事是,这个错误是在我开始该过程后约 1 分钟后出现的。

所以,

  1. 上下文被取消后可能会有一些默认的上下文时间。如果是的话,我怎样才能增加这个时间?
  2. 如果我在 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);
});
Run Code Online (Sandbox Code Playgroud)