22 lines
1.3 KiB
Markdown
22 lines
1.3 KiB
Markdown
# health
|
||
|
||
`health` 提供与网络层无关的存活和就绪 Handler。业务项目只需要注册依赖探针,路由仍通过 `omni.App` 或项目自己的 transport 注册:
|
||
|
||
```go
|
||
checker, err := health.New(health.Probe{
|
||
Name: "database",
|
||
Check: db.PingContext,
|
||
})
|
||
if err != nil {
|
||
return err
|
||
}
|
||
app.GET("/health/live", checker.LivenessHandler())
|
||
app.GET("/health/ready", checker.ReadinessHandler())
|
||
```
|
||
|
||
从 v0.13.0-preview 起,两个 Handler 默认都使用 App 响应模板/自定义 Encoder。就绪成功使用项目成功码和提示;失败以 `NOT_READY` 查询项目错误目录,返回项目字段、业务码和公开提示。HTTP 状态保持 200/503,不受业务错误 HTTP 200 策略影响。底层探针原因不会直接放入 HTTP 响应,保留到失败错误链供日志使用;内部 `Checker.Check` 仍提供检查错误。
|
||
|
||
`ReadinessHandler(health.WithRawResponse())` 只返回健康数据,不包公共体。`health.WithShutdownContext(ctx)` 让服务开始退出时立即标记为未就绪;存活检查不受影响。超时依赖 Probe.Check 自己响应 context 取消,框架不会遗留 goroutine 去强行打断不合作的检查。
|
||
|
||
生成项目的开关、路径和响应模式统一配置在 `server.endpoints`,不需要修改 Handler。完整配置、依赖主动退出和升级方法见 [项目指南](../PROJECT.md)。
|