我应该将新的或旧的 Context 对象发送到我自己的 gRPC 服务器中的第 3 方 gRPC API 吗?
Should I send new or old Context object to 3rd party gRPC API within my own gRPC server?
我们有一个用 golang 编写的 gRPC 服务器。对于其中一个 RPC,我们从 Google Maps gRPC API 请求数据。一旦我们收到来自 Google Maps RPC 的响应,我们就会进行一些计算并 return 对封闭的 RPC(由我们的服务器定义)做出响应。
当然,当在我们的服务器上调用 RPC 时,我们会收到一个 Context 对象。
我的问题是:我们是否应该将相同的 Context 对象传递给 Google Maps RPC?或者,我们是否应该创建一个新的上下文对象(使用 context.Background()
),然后将其传递给 Google 映射 API?
据我所知,1个上下文对1个生命周期有效且只有1个rpc。
因此,一旦我们意识到我们将要进行一个完全不同的 rpc 调用,我们就应该创建一个新的上下文。
然而,新上下文的元数据可能会受到当前上下文元数据的启发。
这里的 RPC 可以被认为类似于 android 中的单个 activity/service/broadcast。
您收到的上下文中包含取消和超时,因此最好使用相同的上下文来创建新的 RPC。否则你需要手动传递这些信号。
关于元数据的一面,接收到的上下文中的元数据不会自动转发到新的RPC,参见:
我们有一个用 golang 编写的 gRPC 服务器。对于其中一个 RPC,我们从 Google Maps gRPC API 请求数据。一旦我们收到来自 Google Maps RPC 的响应,我们就会进行一些计算并 return 对封闭的 RPC(由我们的服务器定义)做出响应。
当然,当在我们的服务器上调用 RPC 时,我们会收到一个 Context 对象。
我的问题是:我们是否应该将相同的 Context 对象传递给 Google Maps RPC?或者,我们是否应该创建一个新的上下文对象(使用 context.Background()
),然后将其传递给 Google 映射 API?
据我所知,1个上下文对1个生命周期有效且只有1个rpc。 因此,一旦我们意识到我们将要进行一个完全不同的 rpc 调用,我们就应该创建一个新的上下文。 然而,新上下文的元数据可能会受到当前上下文元数据的启发。 这里的 RPC 可以被认为类似于 android 中的单个 activity/service/broadcast。
您收到的上下文中包含取消和超时,因此最好使用相同的上下文来创建新的 RPC。否则你需要手动传递这些信号。
关于元数据的一面,接收到的上下文中的元数据不会自动转发到新的RPC,参见: