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

时间:2017-06-22 12:30:13

标签: google-maps go server grpc

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

当然,我们在服务器上调用RPC时会收到Context对象。

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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