您可以使用 gRPC/gRPC-Web 在 Azure 上托管的微服务之间进行通信吗?

问题描述 投票:0回答:6

我目前正在设计微服务架构,我对这个主题非常陌生,这个问题似乎没有在任何地方得到明确的回答。

是否可以使用 gRPC 在微服务(Azure 应用服务)之间进行通信?是否可以通过容器或 Kestrel 以某种方式完成,以便支持 HTTP/2?

我在本地托管时有以下示例:

但是,当在 Azure 中托管它们时,它似乎不起作用:

基本上是否可以在 Azure 中使用 gRPC,或者我是否必须使用 gRPC-Web 进行所有通信? 或者有没有像 REST/SignalR 这样的建议/替代方案?

azure azure-web-app-service microservices grpc grpc-web
6个回答
3
投票

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 已经在西欧地区运行。


1
投票

根据开发者的使用情况,我不建议使用gRPC。具体细节可以参考下面的用户反馈以及我截的一些截图。

您可以先阅读这篇文章。

ASP.NET CORE 上的 SIGNALR 与 GRPC – 选择哪一个

目前状态:

  1. 适用于 .NET 的 gRPC-Web 现已推出

2. Azure SignalR 服务(官方推荐)

开发者反馈:

Azure 应用服务中的 gRpc 支持

图1.

图2.

图3.

图4.


1
投票

截至目前(2021年12月),该问题仍处于开放状态(自2019年4月起) https://github.com/dotnet/aspnetcore/issues/9020

Azure 应用服务使用 IIS/Windows/Http.sys。 Http.sys 内置于操作系统中,并不完全支持 gRPC 所依赖的 HTTP/2 尾随标头。


1
投票

想通了。最终使用 Dapr,一个微服务构建包。到目前为止它非常棒,并且内置了 GRPC 支持


1
投票

微软刚刚宣布将开始在 Azure App Service 上支持 gRPC https://azure.github.io/AppService/2022/05/23/gRPC-support-on-App-Service.html


© www.soinside.com 2019 - 2024. All rights reserved.