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

oalqel3c  于 2022-11-25  发布在  其他
关注(0)|答案(5)|浏览(143)

我目前正在设计一个微服务体系结构,我对这个主题非常陌生,这个问题似乎在任何地方都没有明确的答案。
是否可以使用gRPC在微服务(Azure应用服务)之间进行通信?是否可以使用容器或Kestrel以某种方式进行通信,以便支持HTTP/2?
下面的例子是在本地托管时运行的:

然而,当在Azure中托管它们时,它似乎不起作用:
基本上,是否有可能在Azure中使用gRPC,或者我是否必须使用gRPC-Web进行所有通信?或者是否有任何建议/替代方案,如REST/SignalR?

5cnsuln7

5cnsuln71#

Azure Web App服务现在支持gRPC**,但仅支持基于Linux的Web App**。
这里是the official documentation如何设置它。
基本上,您只需要配置您的应用以打开支持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已经在西欧地区工作。

7fhtutme

7fhtutme2#

根据开发者的使用习惯,我不推荐使用gRPC。具体的细节,你可以参考下面的用户反馈和我拍的一些截图。

您可以先阅读这篇文章。
SIGNALR VS GRPC ON ASP.NET CORE – WHICH ONE TO CHOOSE

当前状态:

  1. gRPC-Web for .NET now available

2. Azure SignalR Service(Official recommendation)(第二个字符)

开发人员反馈:

gRpc support in Azure App Service
图1。

图2。

图3。


指令集
图4。

r55awzrz

r55awzrz3#

截至目前(2021年12月),该问题仍处于开放状态(自2019年4月起)https://github.com/dotnet/aspnetcore/issues/9020
Azure应用服务使用IIS/Windows/Http.sys。Http.sys已集成到操作系统中,不完全支持gRPC所依赖的HTTP/2尾随标头。

bvuwiixz

bvuwiixz4#

解决了这个问题。最后使用了Dapr,一个微服务构建包。到目前为止,它非常棒,并且内置了GRPC支持

相关问题