Panic 处理
本文介绍 Kitex 对 panic 的处理说明。
使用说明
- 业务代码使用 go 关键字创建的 goroutine 里发生的 panic,需要业务自行 recover;受限于语言提供的能力, 无法由框架 Recover;
- 为了保证服务的稳定,Kitex 框架会自动 recover 其他所有 panic。
FAQ
Q: 如何在 Server 中间件中 recover panic?
结论:不能;但框架提供获取该 panic 详情的方式。
Kitex 框架会自行 recover 业务 handler 里发生的 panic,并且(暂)不提供任何在此前插入 recover 逻辑或者中间件的手段。
Q: 获取被 recover 的 panic 详情
你可以在自己的中间件里检查是否发生过 panic,方式如下:
// 在中间件里调用 next(...) 之后:
ri := rpcinfo.GetRPCInfo(ctx)
if stats := ri.Stats(); stats != nil {
if panicked, err := stats.Panicked(); panicked {
// `err` 就是框架调用 recover() 收到的对象
}
}
最后修改
July 18, 2023
: doc: improve context doc (#722) (fca6c87)