Documentation
¶
Overview ¶
Package lifecycle 定义 transport 适配层依赖的应用生命周期契约。
抽出本接口是为了解耦 transport 适配包(hertz/kitex)与 composition root (bootstrap):transport 适配层只需要注册资源、启动后台任务和读取根 context,不应反向 import bootstrap——否则任何只想用 hertz 日志桥接的 服务都会被连带引入 bootstrap → nacos 等完整依赖树,也阻塞未来的模块拆分。
bootstrap.App 隐式满足本接口,调用方无需任何适配代码。 本包为框架无关的底层契约包,不得引入任何 transport 或注册中心依赖。
Index ¶
- type App
- type Manager
- func (m *Manager) Acquire() bool
- func (m *Manager) Add(name string, closer func(ctx context.Context) error, timeout time.Duration)
- func (m *Manager) AddCloser(name string, closer interface{ ... }, timeout time.Duration)
- func (m *Manager) AddTeardown(fn func())
- func (m *Manager) Drain(ctx context.Context)
- func (m *Manager) Errors() []error
- func (m *Manager) GetRefCount() int64
- func (m *Manager) IsAccepting() bool
- func (m *Manager) Listen(signals ...os.Signal)
- func (m *Manager) Release()
- func (m *Manager) SetDrainTimeout(d time.Duration)
- func (m *Manager) Shutdown(ctx context.Context)
- type ManagerOption
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type App ¶
type App interface {
// Context 返回应用的根 context,可传递给后台任务;关闭时被取消。
Context() context.Context
// AddResource 注册需要在优雅关闭时释放的资源,
// name 用于日志标识,closer 是关闭函数。
AddResource(name string, closer func(ctx context.Context) error)
// GoBackground 启动一个带 panic recovery 的后台 goroutine,
// 关闭时通过 ctx 取消信号通知退出并等待完成。
GoBackground(name string, fn func(ctx context.Context))
// RequestShutdown 请求应用进入关闭流程(幂等,可安全并发调用)。
// 取消根 context 以解除 userFn 中对 Context().Done() 的阻塞,
// 进而触发正常优雅关闭序列(资源按注册逆序释放)。
// 典型用途:后台任务检测到不可恢复错误(如 server 端口占用启动失败)
// 时主动触发关机,避免进程无服务地"假活"。
RequestShutdown()
}
App 是 transport 适配层(如 hertz.RunServer / kitex.RunServer) 所需的最小应用生命周期契约。
type Manager ¶ added in v0.6.0
type Manager struct {
// contains filtered or unexported fields
}
Manager 管理优雅关闭的资源。
func New ¶ added in v0.6.0
func New(defaultTimeout time.Duration, opts ...ManagerOption) *Manager
New 创建一个关闭管理器。defaultTimeout 是默认的单个资源关闭超时。 可选 WithLogger 注入宿主日志;不传则使用 stdlib slog。
func (*Manager) Acquire ¶ added in v0.6.0
Acquire 请求许可(返回 false 表示正在停机)。 在处理请求前调用,成功时必须调用 Release。 使用 acqMu 保证 accept 检查与 refCount 递增的原子性, 避免与 Shutdown 之间的竞态窗口。
func (*Manager) AddTeardown ¶ added in v0.6.0
func (m *Manager) AddTeardown(fn func())
AddTeardown 注册一个无参数的清理函数(不接受 context,不返回 error)。
func (*Manager) Drain ¶ added in v0.6.0
Drain 等待所有进行中的请求完成。 应在停止接受新请求之后、关闭资源之前调用。 使用 Acquire/Release 管理请求生命周期时,Drain 会等待所有已 Acquire 的请求 Release。
func (*Manager) Errors ¶ added in v0.6.0
Errors 返回 Shutdown 过程中收集的错误:teardown 失败(含 panic)与 closer job 失败(返回 error 或 panic),按发生顺序排列。 不会触发 Shutdown;如需触发请显式调用 Shutdown。 返回的是副本,调用方修改不影响内部状态。
func (*Manager) GetRefCount ¶ added in v0.6.0
GetRefCount 获取当前进行中的请求数(用于监控)。
func (*Manager) IsAccepting ¶ added in v0.6.0
IsAccepting 是否正在接受新请求。
func (*Manager) SetDrainTimeout ¶ added in v0.6.0
SetDrainTimeout 设置 drain 阶段等待进行中请求完成的最长时长。 该旋钮独立于 per-job 超时(New 的 defaultTimeout):>0 显式超时; 0 使用默认 30s;负数表示不自行限时,仅由 Drain 收到的 ctx 结束等待。
type ManagerOption ¶ added in v0.6.0
type ManagerOption func(*Manager)
ManagerOption 配置 Manager 的函数选项。
func WithLogger ¶ added in v0.6.0
func WithLogger(l *slog.Logger) ManagerOption
WithLogger 注入宿主 slog.Logger:Manager 内部日志(含 job 名等结构化字段) 写入该 logger,便于与宿主日志体系统一采集、告警。 未注入时保持默认行为(stdlib slog,component=shutdown)。 传入 nil 等同未注入。