朴实无华的用于快速构建项目的基础库

144 阅读2分钟

用于快速构建项目的基础库

开始

app := zapp.NewApp("test")
app.Run()

扩展性

组件

我们实现了一些组件, 可以在 这里 找到

插件

我们实现了一些插件, 可以在 这里 找到

服务

我们实现了一些服务, 可以在 这里 找到

配置

请转到 这里

依赖包说明

作为一个基础库, 我们尽量减少了依赖包, 只需要以下包依赖

扩展开发规范

组件开发规范

我们提供了自定义组件创建选项 zapp.WithCustomComponent, 这个核心功能能让我们支持任何组件

... 待完善

插件开发规范

... 待完善

服务开发规范

... 待完善

使用说明

守护进程

初始化时添加 zapp.WithEnableDaemon() 选项, 构建后使用以下命令

./app文件
    install [args]          安装服务, args 是运行时传递给 app 的参数
    remove                  移除服务
    start                   启动app
    stop                    停止app
    status                  查看运行状态

Handler

初始化时添加 zapp.WithHandler(...) 选项

BeforeInitializeHandler         在app初始化前
AfterInitializeHandler          在app初始化后
BeforeStartHandler              在app启动前
AfterStartHandler               在app启动后
BeforeExitHandler               在app退出前
AfterExitHandler                在app退出后

运行时自定义启用插件

初始化时添加 zapp.WithCustomEnablePlugin(...) 选项, zapp 会根据返回值来决定开启和关闭哪些插件

zapp.WithCustomEnablePlugin(func(app core.IApp, plugins map[core.PluginType]bool) {
    if !app.GetConfig().HasFlag("my_plugin") {
        plugins["my_plugin"] = false
    }
})

运行时自定义启用服务

初始化时添加 zapp.WithCustomEnableService(...) 选项, zapp 会根据返回值来决定开启和关闭哪些服务

zapp.WithCustomEnableService(func(app core.IApp, services map[core.ServiceType]bool) {
    if !app.GetConfig().HasFlag("api_service") {
        services["api"] = false
    }
})

会话独立日志

core.ILogger 提供了 NewSessionLogger(fields ...zap.Field) ILogger 方法用于创建一个会话 logger.
使用会话logger打印日志会产生一个全局日志id, 并且我们会根据不同的全局日志id输出不同的颜色.

app生命周期

初始化 > 用户操作 > 启动 > 退出

初始化

app := zapp.NewApp(...) > 生成BaseContext > 加载配置 > 初始化日志记录器 > 构建组件 > 构建插件 > 构建服务

用户操作

用户在这里对服务进行注入

启动

app.Run() > 启动插件 > 启动服务 > 启动内存释放任务 > 阻塞等待退出信号

退出

app.Exit() 或收到退出信号 > 关闭BaseContext > 停止内存释放任务 > 关闭服务 > 关闭插件 > 释放组件资源 > 结束之前调用app.Run()的阻塞