我目前正在设计微服务架构,我对这个主题非常陌生,这个问题似乎没有在任何地方得到明确的回答。
是否可以使用 gRPC 在微服务(Azure 应用服务)之间进行通信?是否可以通过容器或 Kestrel 以某种方式完成,以便支持 HTTP/2?
但是,当在 Azure 中托管它们时,它似乎不起作用:
基本上是否可以在 Azure 中使用 gRPC,或者我是否必须使用 gRPC-Web 进行所有通信? 或者有没有像 REST/SignalR 这样的建议/替代方案?
Azure Web App 服务现在支持 gRPC 但仅适用于基于 Linux 的 Web App。
这里是关于如何设置的官方文档。
基本上,您只需配置应用程序以打开支持 HTTP 2 的端口。在 .NET Kestrel 中,您可以这样做(在下面的示例中,它位于端口 8585):
2022 年 11 月更新:对于 .NET 7 跳过此步骤! 您的 Web 应用程序甚至不会以这个
ConfigureKestrel
代码块启动。不知怎的,没有它它就能神奇地工作。
// Configure Kestrel to listen on a specific HTTP port
builder.WebHost.ConfigureKestrel(options =>
{
options.ListenAnyIP(8080);
options.ListenAnyIP(8585, listenOptions =>
{
listenOptions.Protocols = Microsoft.AspNetCore.Server.Kestrel.Core.HttpProtocols.Http2;
});
});
2022 年 11 月更新: .NET 7 仍需要执行以下步骤
然后你需要在你的Web应用程序中配置HTTP版本和代理
然后需要添加一个指向8585端口的环境变量
我可以确认 gRPC 已经在西欧地区运行。
您可以先阅读这篇文章。
ASP.NET CORE 上的 SIGNALR 与 GRPC – 选择哪一个
目前状态:
图1.
图2.
图3.
图4.
截至目前(2021年12月),该问题仍处于开放状态(自2019年4月起) https://github.com/dotnet/aspnetcore/issues/9020
Azure 应用服务使用 IIS/Windows/Http.sys。 Http.sys 内置于操作系统中,并不完全支持 gRPC 所依赖的 HTTP/2 尾随标头。
想通了。最终使用 Dapr,一个微服务构建包。到目前为止它非常棒,并且内置了 GRPC 支持
微软刚刚宣布将开始在 Azure App Service 上支持 gRPC https://azure.github.io/AppService/2022/05/23/gRPC-support-on-App-Service.html