从 .net Core 中的 webapi 调用 grpc 服务的策略

Strategies for calling grpc service from a webapi in .net Core

我在 .Net 核心中有一个 rest/web API,我将其用作聚合服务来调用也在 .Net core 中的一些底层 gRPC services。对于 WEB API 客户端,我在启动时将通道作为单例创建一次,并使用依赖注入将其注入到我需要的地方。我也在考虑在启动时为 grpc services 创建客户端,然后注入它们。在 Startup 上创建通道和客户端是正确的策略,还是我应该根据 web API 的每个请求创建和关闭通道和客户端?此外,如果创建通道一次是正确的策略,我如何确保通道在关闭时关闭....web API/rest 服务和 grpc services 都将是 运行 Kubernetes Cluster 作为 docker 个容器。

您绝对不应该为每次通话都创建一个新频道。 gRPC 通道应该是长期存在的,如果您创建一次通道然后继续在该通道上调用后续调用,您通常会获得最佳性能和资源利用率。您创建通道的确切范围取决于您的应用程序 - 但在应用程序启动时仅创建一次通道是一种可能的方法(另请注意 TCP/IP 连接是延迟创建的 - 不会创建新连接一直创建到您在该频道上开始第一次通话为止)。