Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章。

前言

很久没更新这个系列。。。之前的章节中讲到ABP的模块是可以独立运行的,但是没有介绍具体怎么操作,本篇就来讨论一下模块如何独立运行,以及一些托管方式。本人也是处于摸索阶段,如有不对欢迎指出。

开始

模块运行

首先需要生成模块的数据库,修改HttpApi.HostIdentityServer项目的appsettings.json数据库连接字符串配置。

\modules\file-management\host\Xhznl.FileManagement.HttpApi.Host\appsettings.json:

\modules\file-management\host\Xhznl.FileManagement.IdentityServer\appsettings.json:

这样会生成2个数据库,如果你只需要一个数据库的话,就把FileManagement的那行配置去掉就好了。

打开程序包管理器控制台,默认项目选择IdentityServer,执行update-database

执行完成会生成Main数据库,其中是一些ABP的基础表。

继续将默认项目设置为HttpApi.Host执行add-migration Initial update-database

执行完成会生成Module数据库,其中是你模块的相关表。

此时这两个项目就可以正常运行了。

项目中可能有多个模块相互协作,如果将各个模块独立运行的话,不可能每个模块都创建一个Main数据库,所以部分ABP的通用模块的数据库表就用同一个就好了。

\modules\file-management\host\Xhznl.FileManagement.HttpApi.Host\appsettings.json:

\modules\file-management\host\Xhznl.FileManagement.IdentityServer\appsettings.json:

动态 C# API 客户端

当有多个独立部署的模块时,可能需要做一些网关之类的来统一入口,模块之间的相互调用也比较麻烦,本篇暂不讨论。下面介绍一下如何使用ABP的动态C# API客户端来调用远程模块。

ABP可以自动创建C# API 客户端代理来调用远程HTTP服务(REST APIS).通过这种方式,你不需要通过 HttpClient 或者其他低级的HTTP功能调用远程服务并获取数据.

前面的章节中,在主项目中将模块的Application层和Domain层的大部分项目都引用了一遍,那种方式是单体部署的情况,模块和主项目托管在同一个进程里。

下面使用C# API客户端来代理远程模块。

首先删除项目中模块的引用和DependsOn

然后在你需要调用模块的项目中,添加模块的HttpApi.Client项目的依赖即可。比如我这里的Xhznl.HelloAbp.HttpApi.Host项目:

然后DependsOn

然后在appsettings.json中添加远程服务的地址配置:

其中的FileManagement这个名称是来自模块的HttpApi.Client项目中的定义:

接下来就可以像使用本地方法一样去使用远程服务了,因为HttpApi.Client是依赖于Application.Contracts项目的,所以你模块的所有服务接口都可以在这里使用,直接注入即可(前提是你的服务需要实现IRemoteService),ABP会自动帮你完成Http的远程调用。随便找个地方测试一下:

接下来是模块项目,最好配合ABP的自动API控制器一起使用,如果你是自定义路由的话,可能会出现一些Could not found remote action的奇怪错误。

Auth服务地址也注意一下:

下面给两个项目打上断点,测试一下流程是否正确:

可以看到,请求已经正常流转到模块项目中。

上面有些乱,总结一下重点:

  1. 添加HttpApi.Client引用
  2. 添加RemoteServices地址配置
  3. 注入服务接口进行使用

如果想托管模块的所有API,那么只需要再添加模块的HttpApi依赖即可。托管方式非常灵活,具体可以参考:模块化架构最佳实践 & 约定

最后

本篇就到这里。。。。。。

初识ABP vNext(12):模块的独立运行与托管的更多相关文章

  1. 初识ABP vNext(9):ABP模块化开发-文件管理

    Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 目录 前言 开始 创建模块 模块开发 应用服务 运行模块 单元测试 模块使用 最后 前言 在之前的章节中介绍过ABP扩展实体,当时在用户 ...

  2. 初识ABP vNext(3):vue对接ABP基本思路

    目录 前言 开始 登录 权限 本地化 创建项目 ABP vue-element-admin 最后 前言 上一篇介绍了ABP的启动模板以及AbpHelper工具的基本使用,这一篇将进入项目实战部分.因为 ...

  3. 初识ABP vNext(1):开篇计划&基础知识

    目录 前言 开始 审计(Audit) 本地化(Localization) 事件总线(Event Bus) 多租户(multi-tenancy technology) DDD分层 实体(Entity) ...

  4. 初识ABP vNext(7):vue身份认证管理&租户管理

    Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 目录 前言 开始 按钮级权限 身份认证管理 R/U权限 权限刷新 租户管理 租户切换 效果 最后 前言 上一篇介绍了vue+ABP国际化 ...

  5. 初识ABP vNext(8):ABP特征管理

    Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 目录 前言 开始 定义特征 应用特征 用户数量 社交登录 最后 前言 上一篇提到了ABP功能管理(特征管理),它来自ABP的Featur ...

  6. 初识ABP vNext(2):ABP启动模板

    目录 前言 开始 AbpHelper 模块安装 最后 前言 上一篇介绍了ABP的一些基础知识,本篇继续介绍ABP的启动模板.使用ABP CLI命令就可以得到这个启动模板,其中包含了一些基础功能模块,你 ...

  7. 初识ABP vNext(5):ABP扩展实体

    Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 目录 前言 开始 扩展实体 路由整理 最后 前言 上一篇实现了前端vue部分的用户登录和菜单权限控制,但是有一些问题需要解决,比如用户头 ...

  8. 初识ABP vNext(4):vue用户登录&菜单权限

    Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 目录 前言 开始 登录 菜单权限 运行测试 最后 前言 上一篇已经创建好了前后端项目,本篇开始编码部分. 开始 几乎所有的系统都绕不开登 ...

  9. 初识ABP vNext(6):vue+ABP实现国际化

    Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 目录 前言 开始 语言选项 语言切换 注意 最后 前言 上一篇介绍了ABP扩展实体,并且在前端部分新增了身份认证管理和租户管理的菜单,在 ...

随机推荐

  1. 刷题[HFCTF2020]EasyLogin

    前置知识 node.js koa框架常用目录,文件 js弱类型语言,空数组与整数1比较时,返回turue jwt令牌 博客讲解: 关于jwt的讲解: http://www.ruanyifeng.com ...

  2. PHP序列化与反序列化学习

    序列化与反序列化学习 把对象转换为字节序列的过程称为对象的序列化:把字节序列恢复为对象的过程称为对象的反序列化. <?php class UserInfo { public $name = &q ...

  3. NX二次开发-C#使用DllImport调用libufun.dll里的UF函数(反编译.net.dll)调用loop等UF函数

    在写这篇文章的时候,我正在头晕,因为下班坐车回家,有些晕车了.头疼的要死.也吃不下去饭. 版本:NX11+VS2013 最近这一年已经由C++过度到C#,改用C#做应用程序开发和NX二次开发. C#在 ...

  4. gRPC-微服务间通信实践

    微服务间通信常见的两种方式 由于微服务架构慢慢被更多人使用后,迎面而来的问题是如何做好微服务间通信的方案.我们先分析下目前最常用的两种服务间通信方案. gRPC(rpc远程调用) 场景:A服务主动发起 ...

  5. 微服务通信之feign的注册、发现过程

    前言 feign 是目前微服务间通信的主流方式,是springCloud中一个非常重要的组件.他涉及到了负载均衡.限流等组件.真正意义上掌握了feign可以说就掌握了微服务. 一.feign的使用 f ...

  6. matlab中ischar确定输入是否为字符数组

    来源:https://ww2.mathworks.cn/help/matlab/ref/ischar.html?searchHighlight=ischar&s_tid=doc_srchtit ...

  7. 6个LED的控制

    控制任务和要求 让6个LED按要求工作 电路设计 程序设计 1 int Led1 = 1; //各LED与实验板的联接引脚 2 int Led2 = 2; 3 int Led3 = 3; 4 int ...

  8. P5858 「SWTR-03」Golden Sword

    题面: Link 题面有点长,不想粘了,QAQ. 题解: 一句话题意,你有 \(n\) 件物品需要依次放进去,每个物品放进去之后会得到一定的权值,为当前锅炉里面的物品的数量乘以 \(a_i\) 每次在 ...

  9. Sticks(UVA - 307)【DFS+剪枝】

    Sticks(UVA - 307) 题目链接 算法 DFS+剪枝 1.这道题题意就是说原本有一些等长的木棍,后来把它们切割,切割成一个个最长为50单位长度的小木棍,现在想让你把它们组合成一个个等长的大 ...

  10. 超级简单的照片画廊MVC

    下载Gallery.zip - 23.5 MB 介绍 我想在我的个人网站上添加一个简单的图片库,但找不到任何合适的方法来从文件夹而不是数据库中挑选图片.也许我应该看得更仔细些!尽管如此,下面是我实现的 ...