跳转到内容

业务域

概念理解

示例代码

业务域逻辑上是一个 namespace ,用于划分资源作用域,并使资源可以按业务域粒度分发和复用。而当自定义代码需要被部署和调用时,业务域又将成为物理上存在的微服务,以分布式的方式提供服务。

Trantor 业务域为标准 maven 工程。因为模型(Model)可能会被其他maven模块依赖,同时还有模块间的服务调用。所以推荐分为apiimplruntime三个maven子模块

  • 工程结构如下:
trantor-example-module
├── example-module-api
│   ├── pom.xml
│   ├── src
│   │   └── main
│   │   ├── java
│   │   │   └── io
│   │   │   └── terminus
│   │   │   └── trantor
│   │   │   └── example
│   │   │   ├── ext
│   │   │   │   └── StaffNumberRuleExt.java
│   │   │   ├── func
│   │   │   │   └── CreateStaffFunc.java
│   │   │   └── model
│   │   │   └── Staff.java
│   │   └── resources
│   │   └── trantor.yml
├── example-module-impl
│   ├── pom.xml
│   ├── src
│   │   ├── main
│   │   │   ├── java
│   │   │   │   └── io
│   │   │   │   └── terminus
│   │   │   │   └── trantor
│   │   │   │   └── example
│   │   │   │   ├── ext
│   │   │   │   │   └── impl
│   │   │   │   │   └── StaffNumberRuleExtImpl.java
│   │   │   │   └── func
│   │   │   │   └── impl
│   │   │   │   └── CreateStaffFuncImpl.java
│   │   │   └── resources
│   │   │   └── trantor
│   │   │   └── resources
│   │   │   └── example_module
│   │   │   ├── example_module-menu-item.json
│   │   │   └── view
│   │   │   ├── StaffCreate.view.ts
│   │   │   └── StaffCreate.view.xml
├── example-module-runtime
│   ├── pom.xml
│   ├── src
│   │   ├── main
│   │   │   ├── java
│   │   │   │   └── io
│   │   │   │   └── terminus
│   │   │   │   └── trantor
│   │   │   │   └── example
│   │   │   │   └── ModuleApplication.java
│   │   │   └── resources
│   │   │   └── application.yml
└── pom.xml

api 模块

在线创建

首先需要在线创建一个业务域

image-20211117140332602

创建好业务域之后同样在线的方式生成模型字典逻辑流可编排服务 等可供其他模块依赖的资源。

接着将在线创建的资源部署到 Maven 仓库。

image-20211123184456576

部署完成后会弹窗显示该资源对应的依赖:

<dependency>
<groupId>io.terminus.erp</groupId>
<artifactId>gaia_erp</artifactId>
<version>2.2.1-SNAPSHOT</version>
</dependency>

代码创建

api 模块主要放置 业务域、模型字典逻辑流可编排服务 等可供其他模块依赖的资源。(当我们选择在线创建这些资源的时候,业务代码中则不需要创建该 api 模块。)

因为在定义 trantor 资源时会用到 trantor 相关 api,所以我们需要在 pom.xml 中添加相关依赖。

<dependency>
<groupId>io.terminus.trantor</groupId>
<artifactId>trantor-api</artifactId>
</dependency>

trantor 将业务域的定义抽象为了更易于理解的 yaml 文件,所以我们可以在 api 模块的resources目录中添加 trantor.yml

product:
key: example_project_product
version: 0.0.1-SNAPSHOT
module:
key: example_module
name: example_module
packageName: io.terminus.trantor.example
version: 0.0.1-SNAPSHOT
description: Trantor module example

业务域定义见参数详情

impl 模块

impl 模块主要放置 视图逻辑流可编排服务 等逻辑实现以及启动类。

因为在该模块中会有具体的逻辑实现,所以我们需要再 pom.xml 中添加 api 模块的依赖。

<dependency>
<groupId>io.terminus.trantor.examples</groupId>
<artifactId>example-module-api</artifactId>
<version>${project.version}</version>
</dependency>

最后引入trantor-sdk依赖

<dependency>
<groupId>io.terminus.trantor</groupId>
<artifactId>trantor-sdk</artifactId>
</dependency>

runtime 模块

因为 Trantor 的业务域本质上来说还是一个 SpringBoot,所以我们还需要添加application.ymlMain Class

  • Application.yml
trantor:
mainModule: example_module # tranotr.yml 中定义的业务域 key
  • Main Class
@SpringBootApplication
public class ExampleApplication {
public static void main(String[] args) {
SpringApplication.run(ExampleApplication.class, args);
}
}

因为在该模块中会有 Trantor 业务域的启动,所以我们需要再 pom.xml 中添加 impl 以及 trantor-runtime 的依赖。

<dependency>
<groupId>io.terminus.trantor.examples</groupId>
<artifactId>example-module-impl</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.terminus.trantor</groupId>
<artifactId>trantor-runtime</artifactId>
</dependency>

内嵌业务域

Trantor 业务域一般来说对应一个部署单元,考虑到有一些轻量级的附属业务域,为了方便部署和代码管理,允许在一个主业务域中,同时内嵌多个子业务域。 主业务域为必选业务域,内嵌的子业务域可以在启动时通过配置改变其启用状态。 业务域正常启动完成后,在交付控制台上会看到多个业务域,但是在运行时,对子业务域的调用都会路由到同一个 JVM。

  • Application.yml
trantor:
mainModule: example_module # 当前业务域下 trantor.yml 中定义的业务域 key
embedModules:
- moduleA # 对应业务域下 trantor.yml 中定义的业务域 key
- moduleB # 对应业务域下 trantor.yml 中定义的业务域 key
enabledModuleKeys: moduleA,moduleB # 本次启用的内嵌模块 key ,多个之间用逗号分隔

常见问题

  • 将 trantor.yml 中的业务域 key 修改后,其他关联资源(*-view.xml*-menu-item.json等)的 key 没有改,导致资源找不到。trantor key 规则