依据上下文映射关系,对处于下游的Order承载体增加对上游Product的依赖,在Order承载体中增加对Product模块中Application.Contracts层的依赖。并在服务配置中完成依赖(第7行)。
[DependsOn( typeof(AbpAutofacModule), typeof(AbpAspNetCoreMvcModule), typeof(AbpAspNetCoreMultiTenancyModule), typeof(OrderManagementApplicationModule), typeof(OrderManagementEntityFrameworkCoreModule), typeof(ProductManagementApplicationContractsModule) )] public class OrderServiceHostModule : AbpModule { ... }配置远程服务代理,在服务配置中设置从Order承载体到Product承载体的远程服务请求。在Order承载体中增加Volo.Abp.Http.Client包并在服务配置中完成依赖。
[DependsOn( ... typeof(AbpHttpClientModule), ... )] public class OrderServiceHostModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { var configuration = context.Services.GetConfiguration(); ... context.Services.AddHttpClientProxies( typeof(ProductManagementApplicationContractsModule).Assembly); ... } }在配置源appsettings文件中加入对Product承载体的远程调用地址
{ "RemoteServices": { "Default": { "BaseUrl": "http://localhost:57687" } }更改项目配置,启动多个文件,一并启动三个独立承载体,再次调用Order中的Get请求,同样获得了从Product上下文的应用服务中的数据
这次采用的不同进程间的承载方式,通过防腐层,然后经ABP提供的Http代理服务调用Product承载体,可以断点查看当前在防腐层中的AppService类型,已经不再是直接使用ProductAppService了。
真香从大单体承载切换多服务承载,Modules部分不需要做任何更改,着实方便。至于内部的远程调用,本身ABP VNext还存在一些问题像类似集合的Get请求在3.1的版本中才做了修复,但是这丝毫不影响这一巨人的前行。
码云仓库
2020-09-26,望技术有成后能回来看见自己的脚步