服务通信是微服务架构中必不可少的功能,服务通信的效率决定了微服务架构的优略。经常使用的微服务通信策略有两种,分别是rpc、http,其中rpc以gRpc框架为表明使用者最多。abp vNext微服务架构中固然也有服务通信策略,采用的是http方式进行服务通信。json
虽然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服务内部通信策略的身份和权限验证变得简单方便,能够说 "用户的请求-->接口身份和权限验证-->微服务接口身份和权限验证" 从始而终一鼓作气,不用在服务通信时构造token或者从新验证用户。abp vNext微服务通信效果基本以下:api
abp vNext微服务架构中提供了内部通信网关(InternalGateway),全部内部服务接口调用均经过该网关服务。下面将介绍如何经过内部网关调用微服务接口。安全
在ApplicationModule中添加AbpHttpClientIdentityModelModule、AbpIdentityHttpApiClientModule模块依赖,上述模块分别在Volo.Abp.Http.Client.IdentityModel、Volo.Abp.Identity.HttpApi.Client程序集,也能够直接引用nuget包。架构
以用户应用服务为例,微服务某应用服务中构造注入IIdentityUserAppService框架
private readonly IIdentityUserAppService _userAppService;微服务
在应用服务接口中调用用户应用服务接口:post
var user = await _userAppService.GetAsync(per.UserID);性能
配置微服务中远程服务地址,远程服务就是内部网关地址。测试
测试接口spa
尽管接口查询业务比较复杂,并且通过远程服务接口调用,可是postman测试接口时间在100ms内,总的来讲性能优越。
以上介绍了abp vNext微服务架构中的服务通信和微服务接口调用方式,经过测试代表abp vNext微服务通信性能可靠,并且经过内部网关分发的api接口都须要身份和权限验证,保证了微服务通信的安全。总结abp vNext服务通信的优势以下:
一、简单,经过以上操做能够看出,abp vNext中的微服务接口调用十分简单,就像普通的仓储调用同样。
二、高效,虽然http方式的服务通信效率低于pRpc框架,可是json包装后的http请求速度也很是可观。
三、安全,相比gRpc框架,使用http进行服务通信时会验证身份和权限,保证了微服务的通信安全。
最近ABP发布了1.0版本,想要转型微服务的盆友感受get起来吧。