1. 程式人生 > >gRPC-微服務間通訊實踐

gRPC-微服務間通訊實踐

##微服務間通訊常見的兩種方式 由於微服務架構慢慢被更多人使用後,迎面而來的問題是如何做好微服務間通訊的方案。我們先分析下目前最常用的兩種服務間通訊方案。 ###gRPC(rpc遠端呼叫) 場景:A服務主動發起請求到B服務,同步方式 範圍:只在微服務間通訊應用 ###EventBus(基於訊息佇列的整合事件) 技術:NotNetCore.Cap + Rabbitmq + Database 場景:A服務要在B服務做某件事情後響應,非同步方式 實現:B服務在完成某件事情後釋出訊息,A服務訂閱此訊息 範圍:只在微服務間通訊應用 通過對比,兩種方式完全不一樣。rpc是類似於http請求的及時響應機制,但是比http更輕量、快捷,它更像以前的微軟的WCF,可以自動生成客戶端程式碼,充分體現了面向實體物件的遠端呼叫的思想;Eventbus是非同步的訊息機制,基於cap的思想,不關心下游訂閱方服務是否消費成功,保障了主服務業務的流暢性,同時也是一款分散式事務的實現方案,可以保障分散式架構中的資料的最終一致性。 我們今天主要介紹gRPC在微服務中的實踐案例。 ##gRPC-Server(服務端) ###框架介紹 * .Net Core sdk 3.1 * Grpc.AspNetCore 2.30.0 * Grpc.Core 2.30.0 ![](https://img2020.cnblogs.com/blog/1145796/202009/1145796-20200930142547584-59951971.png) ![](https://img2020.cnblogs.com/blog/1145796/202009/1145796-20200930142556448-1987290474.png) ###搭建步驟 以.net core webapi 專案為例,詳細說明如何整合gRPC。 ####建立專案 建立web api專案,此步驟說明省略 ####引入nuget包 引入gRPC 服務端需要的 nuget包,Grpc.AspNetCore 2.30.0和Grpc.Core 2.30.0 ####外部訪問 考慮到專案釋出後,有webapi本身的http的介面和gRPC的介面都要給外部訪問,就需要暴露http1和http2兩個埠。 方式1:本地除錯時,可以直接暴露http和https,如果你的伺服器支援https,也可以在生產環境使用https來訪問gRPC服務。 ``` public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup