跳转到内容

模块

代码地址:trantor-examples-module

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

创建模块

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

  • 工程结构如下:
trantor-example-module
├── example-module-api
│ ├── pom.xml
| └── src
│ ├── main
│ │ ├── java
│ │ │ └── io
│ │ │ └── terminus
│ │ │ └── trantor
│ │ │ └── example
│ │ │ └── dictionary
│ │ │ └── model
│ │ └── resources
│ │ └── trantor.yml
├── example-module-server
│ ├── pom.xml
| └── src
│ ├── main
│ │ ├── java
│ │ │ └── io
│ │ │ └── terminus
│ │ │ └── trantor
│ │ │ └── example
│ │ │ └── ExampleApplication.java
│ │ └── resources
│ │ └── application.yml
└── pom.xml

api模块

api 模块主要放置 模块、模型字典等可供其他模块依赖的资源。

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

<dependency>
<groupId>io.terminus.trantor</groupId>
<artifactId>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

模块定义见参数详情

server模块

server 模块主要放置 视图行为 等逻辑实现以及启动类。

因为在该模块中会有具体的业务逻辑实现以及Trantor模块的启动,所以我们需要再pom.xml中添加api以及trantor-framwork的依赖。

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

因为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 模块一般来说对应一个部署单元,考虑到有一些轻量级的附属模块,为了方便部署和代码管理,允许在一个主模块中,同时内嵌多个子模块。 主模块为必选模块,内嵌的子模块可以在启动时通过配置改变其启用状态。 模块正常启动完成后,在交付控制台上会看到多个模块,但是在运行时,对子模块的调用都会路由到同一个 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*-action.json等)的key没有改,导致资源找不到。trantor key 规则