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

CAP-微服務間通訊實踐

## 微服務間通訊常見的兩種方式 由於微服務架構慢慢被更多人使用後,迎面而來的問題是如何做好微服務間通訊的方案。我們先分析下目前最常用的兩種服務間通訊方案。 ### gRPC(rpc遠端呼叫) [gRPC-微服務間通訊實踐](https://zhuanlan.zhihu.com/p/260390840) - 場景:A服務主動發起請求到B服務,同步方式 - 範圍:只在微服務間通訊應用 ### EventBus(基於訊息佇列的整合事件) - 技術:NotNetCore.Cap + Rabbitmq + Database - 場景:A服務要在B服務做某件事情後響應,非同步方式 - 實現:B服務在完成某件事情後釋出訊息,A服務訂閱此訊息 - 範圍:只在微服務間通訊應用 > 通過對比,兩種方式完全不一樣。rpc是類似於http請求的及時響應機制,但是比http更輕量、快捷,它更像以前的微軟的WCF,可以自動生成客戶端程式碼,充分體現了面向實體物件的遠端呼叫的思想;Eventbus是非同步的訊息機制,基於cap的思想,不關心下游訂閱方服務是否消費成功,保障了主服務業務的流暢性,同時也是一款分散式事務的實現方案,可以保障分散式架構中的資料的最終一致性。 我們今天主要介紹CAP在微服務中的實踐案例。 ## 搭建框架介紹 ![](https://img2020.cnblogs.com/blog/1145796/202010/1145796-20201023145746997-2052754460.jpg) ### 新建專案 1. 新建解決方案 DotNetCore.Cap.Demo 2. 新建專案 DotNetCore.Cap.Demo.Publisher 訊息釋出端 3. 新建專案 DotNetCore.Cap.Demo.Subscriber 訊息訂閱端 ![](https://img2020.cnblogs.com/blog/1145796/202010/1145796-20201023145808252-1271379299.jpg) ### 主要sdk - 專案框架 netcoreapp 3.1 - 訊息佇列選用RabbitMQ - 資料庫儲存選用PostgreSql >根據實際情況選擇合適的訊息佇列和資料庫儲存 CAP 支援 Kafka、RabbitMQ、AzureServiceBus 訊息佇列: ``` PM> Install-Package DotNetCore.CAP.Kafka PM> Install-Package DotNetCore.CAP.RabbitMQ PM> Install-Package DotNetCore.CAP.AzureServiceBus ``` CAP 提供了 Sql Server, MySql, PostgreSQL,MongoDB 作為資料庫儲存: ``` PM> Install-Package DotNetCore.CAP.SqlServer PM> Install-Package DotNetCore.CAP.MySql PM> Install-Package DotNetCore.CAP.PostgreSql PM> Install-Package DotNetCore.CAP.MongoDB ``` 本次demo使用的nuget包如下所示 ``` $ dotnet list package 專案“DotNetCore.Cap.Demo.Publisher”具有以下包引用 [netcoreapp3.1]: 頂級包 已請求 已解決 > DotNetCore.CAP 3.1.1 3.1.1 > DotNetCore.CAP.PostgreSql 3.1.1 3.1.1 > DotNetCore.CAP.RabbitMQ 3.1.1 3.1.1 > Microsoft.VisualStudio.Azure.Containers.Tools.Targets 1.10.9 1.10.9 > Npgsql.EntityFrameworkCore.PostgreSQL 3.1.4 3.1.4 > Npgsql.EntityFrameworkCore.PostgreSQL.Design 1.1.0 1.1.0 專案“DotNetCore.Cap.Demo.Subscriber”具有以下包引用 [netcoreapp3.1]: 頂級包 已請求 已解決 > DotNetCore.CAP 3.1.1 3.1.1 > DotNetCore.CAP.PostgreSql 3.1.1 3.1.1 > DotNetCore.CAP.RabbitMQ 3.1.1 3.1.1 > Microsoft.VisualStudio.Azure.Containers.Tools.Targets 1.10.9 1.10.9 > Npgsql.EntityFrameworkCore.PostgreSQL 3.1.4 3.1.4 > Npgsql.EntityFrameworkCore.PostgreSQL.Design 1.1.0 1.1.0 ``` ## DotNetCore.Cap.Demo.Publisher 訊息釋出端 ### 修改Startup檔案 > 注入dotnetcore.cap元件及資料庫上下文 ```C# services.AddDbContext