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

Posted

技术标签:

【中文标题】你可以使用 gRPC/gRPC-Web 在 Azure 上托管的微服务之间进行通信吗?【英文标题】:Can you use gRPC/gRPC-Web to communicate between Microservices hosted on Azure? 【发布时间】:2021-04-16 16:17:13 【问题描述】:

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

是否可以使用 gRPC 在微服务(Azure 应用服务)之间进行通信?能否以某种方式使用 Containers 或 Kestrel 来支持 HTTP/2?

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

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

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

【问题讨论】:

如果我的解决方案对您有启发或帮助,请将我的回答标记为accepted,谢谢~ 【参考方案1】:

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

您可以先阅读这篇文章。

SIGNALR VS GRPC ON ASP.NET CORE – WHICH ONE TO CHOOSE

当前状态:

    gRPC-Web for .NET now available

2。 Azure SignalR Service(Official recommendation)

开发者反馈:

gRpc support in Azure App Service

图 1。

图 2.

图 3。

图 4。

【讨论】:

【参考方案2】:

截至目前(2021 年 12 月),此问题仍未解决(自 2019 年 4 月起) https://github.com/dotnet/aspnetcore/issues/9020

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

【讨论】:

以上是关于你可以使用 gRPC/gRPC-Web 在 Azure 上托管的微服务之间进行通信吗?的主要内容,如果未能解决你的问题,请参考以下文章

Terraform 学习总结—— 简单记录 Azure CN 上 Terraform Provider 配置的一个坑

我们可以使用 Azure 存储队列作为事件源吗?

Asp.net 推送通知 [关闭]

Azure Synapse Analytics 版本控制

从入门到上手:什么是K8S持久卷?

从入门到上手:什么是K8S持久卷?