目标
部署时进程在收到 SIGTERM 后立即退出,导致在途请求被切断。本配方编写集成测试:先发起一个慢请求使其在途,再发送 SIGTERM,并断言该请求仍以 200 完成且进程按时退出,从而验证优雅排水;同时提醒需注册硬性截止定时器,避免关闭挂死。
步骤要点
- 启动服务并发起一个在途慢请求。
- 发送 SIGTERM 并断言在途请求仍成功完成。
- 断言进程在宽限期内退出。
- 加入硬性截止定时器防止关闭挂死。
const child = spawn('node', ['server.js']);
const slow = fetch('http://localhost:3000/slow');
await new Promise(r => setTimeout(r, 200));
排错提示
- 信号处理器需尽早注册并先停止监听。
- 关闭可能挂死,需要超时兜底。
- 不覆盖负载均衡的连接排水。
适用边界
- 不覆盖负载均衡排水。
- 信号语义因平台而异。