我应该将新的或旧的上下文对象发送到我自己的 gRPC 服务器中的第三方 gRPC API



我们有一个用golang编写的gRPC服务器。对于其中一个 RPC,我们会从 Google Maps gRPC API 请求数据。一旦我们收到来自谷歌地图RPC的响应,我们就会进行一些计算,并将响应返回给封闭的RPC(由我们的服务器定义(。

当然,当我们的服务器上调用 RPC 时,我们会收到一个上下文对象。

我的问题是:我们应该将相同的上下文对象传递给谷歌地图RPC吗?或者,我们是否应该创建一个新的上下文对象(使用 context.Background() (,然后将其传递给 Google Maps API?

您收到的上下文包含取消和超时,因此最好使用相同的上下文来创建新的 RPC。否则,您需要手动传递这些信号。

一端元数据上,元数据在接收到的上下文中不会自动转发到新的RPC,请参见:

https://github.com/grpc/grpc-go/issues/1148

https://github.com/grpc/grpc-go/pull/1157

据我所知,1 个上下文对 1 个 rpc 的生命周期有效,而且只有 1 个 rpc。因此,一旦我们意识到我们将要进行完全不同的 rpc 调用,我们就应该创建一个新的上下文。但是,新上下文的元数据可能受到当前上下文元数据的启发。这里的 RPC 可以被视为类似于 android 中的单个活动/服务/广播。

最新更新