簡介
服務通訊是微服務架構中必不可少的功能,服務通訊的效率決定了微服務架構的優略。常用的微服務通訊策略有兩種,分別是rpc、http,其中rpc以gRpc框架為代表使用者最多。abp vNext微服務架構中當然也有服務通訊策略,采用的是http方式進行服務通訊。
gRpc和http對比
雖然gRpc高效安全,但是相關的.net框架實在臃腫難用,這一缺陷在.net core3.X后可能會得到完美解決。abp vNext微服務架構出現在.net core3.0以前,所以選擇了靈活方便的http進行服務通訊。微服務通訊中http策略效率雖然低於gRpc,但是包裝json后通過容器服務內部調用效率也是杠杠的。http作為服務通訊的最大好處是用戶請求http api接口后,內部服務請求其他服務時會攜帶用戶的http header(身份信息)。abp vNext微服務架構中使用ids4集成了統一的授權服務,所有接口授權均通過jwt-bearer形式,這種方式讓http服務內部通訊策略的身份和權限驗證變得簡單方便。
abp vNext服務通訊
abp vNext微服務架構中提供了內部通訊網關(InternalGateway),所有內部服務接口調用均通過該網關服務。下面將介紹如何通過內部網關調用微服務接口。
step1:引用AbpHttpClientIdentityModelModule、AbpIdentityHttpApiClientModule模塊
在ApplicationModule中添加AbpHttpClientIdentityModelModule、AbpIdentityHttpApiClientModule模塊依賴,上述模塊分別在Volo.Abp.Http.Client.IdentityModel、Volo.Abp.Identity.HttpApi.Client程序集,也可以直接引用nuget包。
step2:注入應用服務
以用戶應用服務為例,微服務某應用服務中構造注入IIdentityUserAppService
private readonly IIdentityUserAppService _userAppService;
step3:調用接口
在應用服務接口中調用用戶應用服務接口:
var user = await _userAppService.GetAsync(per.UserID);
step4:配置遠程服務接口
配置微服務中遠程服務地址,遠程服務就是內部網關地址。

測試接口

盡管接口查詢業務比較復雜,而且經過遠程服務接口調用,但是postman測試接口時間在100ms內,總的來說性能優越。
總結
以上介紹了abp vNext微服務架構中的服務通訊和微服務接口調用方式,通過測試表明abp vNext微服務通訊性能可靠,而且通過內部網關分發的api接口都需要身份和權限驗證,保證了微服務通訊的安全。總結abp vNext服務通訊的優點如下:
1、簡單,通過以上操作可以看出,abp vNext中的微服務接口調用十分簡單,就像普通的倉儲調用一樣。
2、高效,雖然http方式的服務通訊效率低於pRpc框架,但是json包裝后的http請求速度也非常可觀。
3、安全,相比gRpc框架,使用http進行服務通訊時會驗證身份和權限,保證了微服務的通訊安全。
最近ABP發布了1.0版本,想要轉型微服務的盆友感覺get起來吧。
