Skip to content
/ zapp Public

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

Notifications You must be signed in to change notification settings

zly-app/zapp

Repository files navigation

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



开始

推荐使用 uapp

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

扩展性

组件

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

插件

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

filter

  • 这里 内置了一些 filter

服务

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

配置

使用说明

守护进程

初始化时添加 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 []core.PluginType) []core.PluginType {
    if !app.GetConfig().HasFlag("my_plugin") {
        plugins = append(plugins, "my_plugin")
    }
	return plugins
})

运行时自定义启用服务

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

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

独特的日志

core.ILogger 提供了 NewTraceLogger(ctx context.Context, fields ...zap.Field) ILogger 方法用于创建一个带链路id的 logger(前提是ctx中包含有效的span).
使用生成的log打印日志会带上链路id, 并且我们会根据不同的链路id输出不同的颜色.

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

日志打印时可以将 ctx 传入, 如果 ctx 中包含 traceID 那么在日志输出中会带上 traceID. 示例 app.Info(ctx, "test")

app生命周期

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

初始化

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

用户操作

用户在这里对服务进行注入, 如注入插件, 注入服务等.

启动

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

退出

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