标准答案

  1. 入口检测到连接关闭或取消信号后,应停止尚未开始的工作、流式输出和可中断的下游请求,释放连接、线程和缓冲资源。
  2. 将取消和 deadline 传递给数据库查询、HTTP/RPC 调用、消息生产和后台任务,避免上游放弃后下游仍持续占用容量。
  3. 扣款、事务提交、外部调用等已进入不可安全中断阶段的操作,需要明确继续完成、记录状态并让客户端通过幂等查询获取最终结果。
  4. 对长任务可快速返回操作 ID 或 202,后台可靠执行后由状态接口、事件或回调提供结果。
  5. 日志和追踪应区分客户端取消、上游 deadline、服务端主动拒绝和下游超时,避免把所有中断都归为同一种错误。

题目解析

取消是协作信号,不是强制终止指令。跨进程、数据库和第三方服务未必都支持即时取消,必须设计幂等和补偿。

忽略取消会浪费资源;盲目取消已提交的业务又可能产生半完成状态。正确策略取决于领域操作是否可逆和如何对账。

常见误区

  • 客户端断开后仍让所有下游工作无限继续。
  • 收到取消就强行终止已提交的扣款或状态迁移,留下不一致数据。
  • 没有记录取消来源和最终业务状态。

作者信息