[從0到1搭建ABP微服務] - 搭建內部網關


簡介

在微服務體系中通常具有多個網關,其中內部網關負責轉發微服務間的網絡請求。內部網關並不會公開,以保證內部通信的安全穩定。本篇將介紹ABP內部網關服務的搭建和微服務通訊。

創建並配置項目

新建一個InternalGateway空項目並安裝以下nuget包:

PM> Install-Package IdentityServer4.AccessTokenValidation
PM> Install-Package Ocelot
PM> Install-Package Serilog.AspNetCore
PM> Install-Package Serilog.Sinks.Async
PM> Install-Package Serilog.Sinks.ElasticSearch
PM> Install-Package Serilog.Sinks.File
PM> Install-Package Volo.Abp.AspNetCore.Serilog
PM> Install-Package Volo.Abp.Autofac
PM> Install-Package Volo.Abp.Identity.HttpApi

配置InternalGatewayHostModule

內部網關不需要太多插件,所以只需依賴AbpAutofacModule、AbpIdentityHttpApiModule、AbpAspNetCoreSerilogModule,然后注冊jwt認證和ocelot。

相關代碼可見GitHub

配置ocelot

ocelot配置非常簡單,只要在appsettings中進行轉發服務地址配置即可。配置IdentityService如下:

  "ReRoutes": [
    {
      "DownstreamPathTemplate": "/api/identity/{everything}",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 55389
        }
      ],
      "UpstreamPathTemplate": "/api/identity/{everything}",
      "UpstreamHttpMethod": [ "Put", "Delete", "Get", "Post" ]
    }
  ],

其他配置可見完整項目:GitHub

微服務內部通訊

下面來演示如何在微服務中使用內部網關進行服務通訊。

配置遠程服務和身份授權

Identity服務的接口都有身份認證,想要獲取Identity信息必須要先授權然后請求接口,在Business服務中需要添加內部服務地址和App Client身份和授權配置。

  "RemoteServices": {
    "Default": {
      "BaseUrl": "http://localhost:59682/",
      "UseCurrentAccessToken": "false"
    }
  },
  "IdentityClients": {
    "Default": {
      "GrantType": "client_credentials",
      "ClientId": "business-app",
      "ClientSecret": "1q2w3e*",
      "Authority": "http://localhost:53362",
      "Scope": "InternalGateway IdentityService"
    }
  }

注: business-app需要在授權服務中進行手動添加。

員工關聯用戶場景

在Business系統中有一個職員管理業務,每一個職員需要關聯一個ABP用戶,查詢職員時同時查詢關聯的用戶信息。
Step1:添加引用
添加Volo.Abp.Identity.HttpApi.IdentityModel,該中間件對內部接口請求的身份信息進行了包裝,在進行服務通訊時會自動攜帶身份信息。
添加Volo.Abp.Identity.HttpApi.Client,該組件提供了用戶服務的Api接口。
Step2:添加依賴
在BusinessApplicationModule中分別添加AbpHttpClientIdentityModelModule、AbpIdentityHttpApiClientModule依賴。
Step3:獲取用戶信息
首先在EmployeeAppService中注入UserAppService應用,ABP服務通訊的優勢在於十分方便,如果你想在服務中調用其他服務,直接像應用服務一樣注入使用。查詢職員的用戶信息如下:

聯調

啟動AuthServer、InternalGateway、IdentityService、Business服務。

使用腳本命令一鍵啟動更加方便,后續我會詳細的介紹ci/cd啟動。

測試接口如下:

可以看到接口並未攜帶token同樣調用成功,因為business-app已經配置User權限。給微服務分配客戶端權限更加科學,因為在c端系統中用戶往往沒有任何權限,甚至直接匿名,沒有用戶信息。

總結

ABP雖然提供了完整的服務通訊基礎設施,但是由於使用http方式,而且授權驗證過程繁瑣,所以整體效率並不是很高,但是速度也是在可以接受的范圍。如果要追求極致性能,建議在微服務內部通訊時跳過授權認證,但為了安全,不要公開免認證的微服務。

代碼地址:https://github.com/WilliamXu96/ABP-MicroService
文章目錄:https://www.cnblogs.com/william-xu/p/12537155.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM