mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-16 23:53:33 +08:00
Caddy 式进程内模块系统(详见 docs/plugin-architecture/MODULE-AUTHOR-GUIDE.md): - internal/plugin:命名空间注册表(init 注册/重复 panic)、Provision→Validate→Start→Stop 生命周期(Start 半途逆序回滚、Stop 逆序+ctx deadline)、Host 四项 ports 能力面、 modules: 配置子树(enabled 三态;viper 含点 key 手工提取)、Runtime 状态机 - internal/plugin/plugintest:模块测试夹具(NewHost Options + RunLifecycle) - internal/modules:standard/imports.go 唯一插装清单 + job.hello 示例模块(默认 disabled) - Wire/main 接入:Build+Start 失败 fail-fast(显式 Cleanup 防 leader 锁泄漏)、 runtime.Stop 在 cleanup 并行组首位(先于 Redis/Ent) - admin 可观测:GET /api/v1/admin/modules(只读,错误文本脱敏) - 默认配置零行为变更(Phase-0 安全网 + bench allocs 零漂移验证) 含两轮对抗式审计修复(1×P1 启动失败泄漏 leader 锁 + 11×P2)与回归测试。
35 lines
1.3 KiB
Go
35 lines
1.3 KiB
Go
package plugin
|
|
|
|
import (
|
|
"github.com/redis/go-redis/v9"
|
|
"go.uber.org/zap"
|
|
|
|
ent "github.com/Wei-Shaw/sub2api/ent"
|
|
)
|
|
|
|
// Host 是模块可使用的宿主能力面(纯数据结构,由宿主装配后注入 Provision)。
|
|
//
|
|
// 边界纪律:Host 只暴露 ports 级基础能力,禁止暴露任何具体 Service;
|
|
// 本阶段仅 Logger / ConfigOf / DB / Redis 四项,后续每新增一项
|
|
// 必须在插件化 ROADMAP 决策记录中登记,防止 Host 膨胀为上帝对象。
|
|
type Host struct {
|
|
// Logger 是宿主提供的结构化日志器。模块应通过它输出日志,
|
|
// 而不是自建全局 logger。
|
|
Logger *zap.Logger
|
|
|
|
// ConfigOf 将 `modules:` 配置子树中 id 对应的 raw 私有配置解码到 out
|
|
// (out 必须是指向模块自定义配置 struct 的指针)。
|
|
// 模块未配置时不修改 out(模块应自带默认值);解码类型错误时返回错误。
|
|
//
|
|
// 该字段通常由宿主装配为 Config.Of;若装配时留空,
|
|
// NewRuntime 会默认绑定到 Runtime 自身持有的 Config。
|
|
ConfigOf func(id ModuleID, out any) error
|
|
|
|
// DB 是 Ent ORM 客户端(数据库访问能力)。
|
|
DB *ent.Client
|
|
|
|
// Redis 是 go-redis 客户端(缓存/队列能力)。
|
|
// 使用 UniversalClient 接口以兼容单机与集群部署形态。
|
|
Redis redis.UniversalClient
|
|
}
|