从 .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 连接是延迟创建的 - 不会创建新连接一直创建到您在该频道上开始第一次通话为止)。
我在 .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 连接是延迟创建的 - 不会创建新连接一直创建到您在该频道上开始第一次通话为止)。