Naval Base Package Documentation
Naval Base Package Documentation
概述
io.github.sinri.drydock.naval.base 包是 DryDock 框架中以”船只航行”为比喻的应用程序基础包,提供了所有应用单元的核心接口和基础实现。该包以海军舰船的概念来抽象程序的生命周期管理和运行框架。
包结构
核心接口
Boat 接口
public interface Boat extends CommonUnit
Boat 是所有单体应用程序(非集群模式)的基础接口,继承自 CommonUnit,以船只的概念定义了应用程序的基本生命周期方法。
主要方法:
void launch()- 启动应用程序(比喻为船只启航)void shipwreck(Throwable throwable)- 异常处理(比喻为海难处理)void sink()- 关闭应用程序(比喻为船只沉没)
设计理念:
- 作为所有单体应用程序的统一接口
- 提供标准的应用程序生命周期管理
- 继承
CommonUnit获得日志记录和事件处理能力
抽象基类
Warship 抽象类
abstract public class Warship implements Boat
Warship 是所有应用程序的抽象基类,实现了 Boat 接口,以军舰的概念提供了完整的应用程序启动和运行框架。
核心功能:
- 日志系统
- 运行日志记录器 (
KeelIssueRecorder<KeelEventLog>)(比喻为航海日志) - 应用级事件日志中心 (
KeelIssueRecordCenter)
- 运行日志记录器 (
- 启动流程
- 本地配置加载
- Keel 引擎初始化
- 远程配置加载
- 事件通信中心建立
- 应用程序特定启动逻辑
- 生命周期管理
- 标准化的应用程序启动序列
- 异常处理和故障恢复
- 优雅关闭机制
关键常量:
EXIT_CODE_FOR_KEEL_INIT_FAILED = 1- Keel 初始化失败退出码EXIT_CODE_FOR_SELF_SINK = 0- 自沉退出码
抽象方法(子类必须实现):
buildIssueRecordCenter()- 构建事件记录中心buildVertxOptions()- 构建 Vertx 配置选项loadLocalConfiguration()- 加载本地配置loadRemoteConfiguration()- 加载远程配置launchAsWarship()- 应用程序特定的启动逻辑
核心方法实现:
launch() - 启动方法(比喻为启航)
完整的应用程序启动流程:
- 记录启动时间
- 加载本地配置
- 构建并初始化 Vertx 选项
- 初始化 Keel 引擎
- 加载远程配置
- 构建事件记录中心
- 执行应用程序特定启动逻辑
- 记录启动完成时间
shipwreck(Throwable) - 异常处理(比喻为海难处理)
- 记录异常信息到运行日志
- 使用故障退出码终止程序
sink() - 关闭方法(比喻为自沉)
- 记录关闭日志
- 优雅关闭 Keel 引擎
- 使用正常退出码终止程序
设计模式
模板方法模式
Warship 类使用模板方法模式定义了应用程序的标准启动流程,子类通过实现抽象方法来定制具体行为。
依赖注入
通过抽象方法允许子类注入特定的配置和组件,如事件记录中心和 Vertx 选项。
依赖关系
外部依赖
- Keel 框架: 提供底层引擎和日志功能
- Vert.x: 异步应用平台
- DryDock Common: 通用组件和日志主题
内部依赖
CommonUnit: 提供通用单位接口DryDockLogTopics: 日志主题定义
使用示例
public class MyWarship extends Warship {
@Override
protected KeelIssueRecordCenter buildIssueRecordCenter() {
// 构建自定义事件记录中心
return KeelIssueRecordCenter.outputCenter();
}
@Override
public VertxOptions buildVertxOptions() {
// 构建 Vertx 配置
return new VertxOptions().setWorkerPoolSize(10);
}
@Override
protected void loadLocalConfiguration() {
// 加载本地配置文件
}
@Override
protected Future<Void> loadRemoteConfiguration() {
// 异步加载远程配置
return Future.succeededFuture();
}
@Override
protected Future<Void> launchAsWarship() {
// 启动应用程序特定功能
return Future.succeededFuture();
}
}
版本历史
- 1.1.0: 初始版本,定义基础接口和抽象类
- 1.3.4: 增加事件记录中心支持
- 1.4.18: 增加启动时间统计
- 2.0.3: 更新日志系统接口
最佳实践
- 继承 Warship 类:所有应用程序应继承
Warship而不是直接实现Boat - 异常处理:在
launchAsWarship()中正确处理异常,避免触发shipwreck() - 配置管理:合理分离本地和远程配置加载逻辑
- 日志使用:充分利用运行日志记录器记录关键操作
- 优雅关闭:在需要时调用
sink()方法进行优雅关闭