为什么响应超时不够
返回 503 而数据库查询仍在运行,只保护了客户端,没有保护服务器。查询仍占用连接和内存。有用的超时有两部分:控制响应的截止时间,以及到达下游操作的取消。处理器接受 signal 时,包装器同时处理两者。
传播 signal
把 signal 传给 fetch、数据库驱动和队列客户端。对不支持取消的库,设置库级超时并记录缺口。signal 中止后不要启动新工作;在昂贵步骤前检查 signal.aborted。
if (signal.aborted) throw new Error('request cancelled');
验证失败路径
添加一个等待超过超时的测试路由,断言响应为 503、处理器停止、日志中没有未处理拒绝。再测试快速路由,确认计时器被清除且不会阻止进程退出。泄漏计时器的超时可能阻止干净关闭。
验证超时
预期结果:慢路由在截止时间返回 503,下游调用被取消,快速路由不受影响。用可控延迟的测试依赖确认,并检查进程在空闲后能正常关闭。