gRPC-微服務間通訊實踐
阿新 • • 發佈:2020-09-30
##微服務間通訊常見的兩種方式
由於微服務架構慢慢被更多人使用後,迎面而來的問題是如何做好微服務間通訊的方案。我們先分析下目前最常用的兩種服務間通訊方案。
###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