Aviation Carrier Package
Aviation Carrier Package
航母(AircraftCarrier)包提供了基于 Vert.x 的微服务应用程序启动框架。该包实现了一个完整的应用程序生命周期管理系统,包含健康监控、队列处理、定时任务和HTTP服务功能。
包概览
类名 | 描述 |
---|---|
AircraftCarrierDeck |
基础抽象类,提供命令行参数解析和程序入口点 |
AircraftCarrier |
核心实现类,提供完整的微服务启动和管理功能 |
核心组件
1. AircraftCarrierDeck
位置: src/main/java/io/github/sinri/drydock/aviation/carrier/AircraftCarrierDeck.java
基础抽象类,实现了 CommonUnit
接口,提供:
主要功能
- 命令行解析: 基于 Picocli API 的命令行参数处理
- 程序入口: 通过
launch(String[] args)
方法启动应用程序 - 日志系统: 内置
KeelEventLog
日志记录器 - 问题记录中心: 提供
KeelIssueRecordCenter
支持
关键方法
// 程序启动入口
public final void launch(String[] args)
// 抽象方法,需要子类实现
protected abstract String buildCliName()
protected abstract String buildCliDescription()
protected abstract int runWithCommandLine(CommandLine.ParseResult parseResult)
// 可选重写的方法
protected List<picocli.CommandLine.Model.OptionSpec> buildCliOptions()
protected List<picocli.CommandLine.Model.PositionalParamSpec> buildCliArguments()
2. AircraftCarrier
位置: src/main/java/io/github/sinri/drydock/aviation/carrier/AircraftCarrier.java
核心实现类,继承自 AircraftCarrierDeck
并实现 HealthMonitorMixin
接口。
内置组件
飞机组件 (Aircraft Components)
- Bomber (轰炸机): 定时任务执行器,基于 Sundial 实现
- Drone (无人机): 队列任务处理器,基于 Queue 实现
- Fighter (战斗机): HTTP服务提供器
监控组件
- HealthMonitor: 健康状况监控
- MetricRecorder: 指标记录器,默认使用阿里云 SLS
命令行选项
选项 | 类型 | 描述 |
---|---|---|
--disableQueue |
Flag | 禁用队列组件 |
--disableSundial |
Flag | 禁用定时任务组件 |
--disableReceptionist |
Flag | 禁用HTTP服务组件 |
--receptionistPort |
Value | 指定HTTP服务端口 |
启动流程
应用程序按以下顺序初始化:
- 本地配置加载 - 从
config.properties
文件加载配置 - Vert.x 初始化 - 根据
buildVertxOptions()
初始化 Vert.x 实例 - 远程配置加载 - 异步加载远程配置
- 日志系统配置 - 配置问题记录中心和日志旁路
- 指标记录器启动 - 启动阿里云 SLS 指标记录器
- 健康监控加载 - 初始化健康监控系统
- 业务准备 - 调用
prepare()
方法 - 组件初始化:
- Queue组件 (如果未禁用)
- Sundial组件 (如果未禁用)
- HTTP服务组件 (如果未禁用)
- 就绪状态 - 调用
ready()
方法
抽象方法
子类必须实现以下抽象方法:
// 构造器方法
protected abstract Bomber constructBomber()
protected abstract Drone constructDrone()
protected abstract Fighter constructFighter(@Nullable Integer port)
// 配置方法
protected abstract VertxOptions buildVertxOptions(@Nonnull CommandLine.ParseResult parseResult)
protected abstract Future<Void> loadRemoteConfiguration(@Nonnull CommandLine.ParseResult parseResult)
// 生命周期方法
protected abstract Future<Void> prepare(@Nonnull CommandLine.ParseResult parseResult)
protected abstract Future<Void> ready(@Nonnull CommandLine.ParseResult parseResult)
// CLI方法
protected abstract String buildCliName()
protected abstract String buildCliDescription()
可重写方法
// 配置加载
protected void loadLocalConfiguration(@Nonnull CommandLine.ParseResult parseResult)
// 问题记录中心构建
protected KeelIssueRecordCenter buildIssueRecordCenter()
// 健康监控构建
public HealthMonitor<?> buildHealthMonitor()
使用示例
基本实现
public class MyApplication extends AircraftCarrier {
@Override
protected String buildCliName() {
return "my-app";
}
@Override
protected String buildCliDescription() {
return "My microservice application";
}
@Override
protected VertxOptions buildVertxOptions(CommandLine.ParseResult parseResult) {
return new VertxOptions();
}
@Override
protected Future<Void> loadRemoteConfiguration(CommandLine.ParseResult parseResult) {
// 实现远程配置加载逻辑
return Future.succeededFuture();
}
@Override
protected Bomber constructBomber() {
return new MyBomber();
}
@Override
protected Drone constructDrone() {
return new MyDrone();
}
@Override
protected Fighter constructFighter(Integer port) {
return new MyFighter(port);
}
@Override
protected Future<Void> prepare(CommandLine.ParseResult parseResult) {
// 业务准备逻辑
return Future.succeededFuture();
}
@Override
protected Future<Void> ready(CommandLine.ParseResult parseResult) {
// 应用就绪后的逻辑
return Future.succeededFuture();
}
public static void main(String[] args) {
new MyApplication().launch(args);
}
}
启动命令示例
# 启动完整服务
java -jar my-app.jar
# 禁用队列组件
java -jar my-app.jar --disableQueue
# 禁用定时任务组件
java -jar my-app.jar --disableSundial
# 禁用HTTP服务
java -jar my-app.jar --disableReceptionist
# 指定HTTP服务端口
java -jar my-app.jar --receptionistPort=9090
# 组合使用
java -jar my-app.jar --disableQueue --receptionistPort=8080
依赖关系
该包依赖以下主要组件:
- Keel Framework: 核心基础设施
- Vert.x: 异步应用平台
- Aircraft Components:
Bomber
(Sundial定时任务)Drone
(Queue队列处理)Fighter
(HTTP服务)
- Health Monitor: 健康监控系统
- Logging System: 日志和指标记录
- Aliyun SLS: 阿里云日志服务适配器
设计模式
- 模板方法模式:
AircraftCarrier
定义启动流程模板,子类实现具体步骤 - 工厂方法模式: 通过
construct*()
方法创建组件实例 - Mixin模式: 通过
HealthMonitorMixin
提供健康监控能力 - 命令模式: 基于 Picocli 的命令行参数处理
配置说明
本地配置文件
默认读取 config.properties
文件,可通过重写 loadLocalConfiguration()
方法自定义。
远程配置
通过实现 loadRemoteConfiguration()
方法加载远程配置,支持异步加载。
健康监控配置
支持两种健康监控模式:
- 基于问题记录:
HealthMonitorWithIssueRecorder
- 基于指标记录:
HealthMonitorWithMetricRecorder
注意事项
- 生命周期管理: 确保在
prepare()
和ready()
方法中正确处理异步操作 - 异常处理: 启动过程中的异常会导致程序退出 (System.exit(1))
- 组件依赖: 各组件之间存在启动顺序依赖,不可随意调整
- 资源管理: 注意及时释放资源,避免内存泄漏
- 集群模式: 当前版本未完全支持集群模式(代码中有 TODO 注释)
- CLI 框架: 从 2.1.0 版本开始使用 Picocli 替代已弃用的 Vert.x CLI 模块
版本历史
- 1.5.0: 初始版本,提供基础航母框架
- 1.5.2: 增加组件获取方法和配置检查方法
- 2.1.0: 从 Vert.x CLI 迁移到 Picocli,增加 JsonifiableSerializer 注册
该包提供了一个强大而灵活的微服务应用程序框架,通过模块化设计支持各种业务场景的快速开发和部署。