断线重连时补齐遗漏事件
Reconnect event streams without gaps
结合实时流和历史记录恢复事件,按事件 ID 去重,并独立检查停止条件。
以下示例与示意结果由本站编写,用于说明方法,不是模型实测结果。
使用场景
任务事件流断线后,界面需要补回遗漏消息且不能重复更新订单。教学历史返回 e1=开始、e2=完成,新流也返回 e2=完成;事件 ID 稳定,历史可分页查询。重复的完成事件仍须让消费者停止。
具体做法
- 按接口契约建立并确认新流已打开,再拉取完整的可用历史,检查分页失败与保留期。
- 按所需顺序处理历史;未见过的 ID 才触发一次处理。记录成功处理进度,不能把失败处理简单标为完成。
- 消费实时流,去重只包住业务处理;终止判断在它外面,每个事件都执行。历史中的终态也要按宿主生命周期规则处理。
- 若历史不完整、缓冲溢出或顺序不能满足消费者,报告恢复缺口并采用重建策略,不能声称补齐成功。
反例
订单事件流重连后直接从现在继续。为防重复,遇到已见 ID 立刻 continue,最后再检查完成状态。
改进写法
恢复这条订单流:先确认新流打开,再读取所有可取得的历史页,处理 e1 和 e2。实时尾流里的 e2 不重复更新订单,但照常检查完成状态并结束消费。输出处理ID、停止原因和无法覆盖的时间区间;历史请求失败时不报告完整恢复。
为什么这样改
先开流再读历史,让两个读取区间重叠;ID 去重消除重叠带来的重复处理。生命周期检查独立于去重,避免历史中已出现的终态在实时流中被 continue 吞掉。
如何验证
教学轨迹应记录处理 e1、e2 各一次,以及实时重复 e2 的终态检查和停止。另注入历史第二页失败:结果应标为恢复未完成。检查日志中的顺序、分页和重复事件,不仅看最终界面是否显示完成。
适用边界
须确认具体接口的打开时机、缓冲、排序、稳定 ID、保留期与空闲/终态含义。冻结来源各语言示例的处理和停止逻辑并不完全一致,不能直接视为投递保证。进程崩溃后的持久去重与事务性副作用另需设计;无法恢复历史中不存在的事件。
原文与版本
- anthropics/skills · Reconnecting after a dropped stream
查看此版本的文件8a1541c4a3ff - anthropics/skills · Lossless stream reconnect
查看此版本的文件8a1541c4a3ff - anthropics/skills · Reconnecting and Tailing
查看此版本的文件8a1541c4a3ff - anthropics/skills · Reconnecting and Tailing
查看此版本的文件8a1541c4a3ff - anthropics/skills · Reconnecting and Tailing
查看此版本的文件8a1541c4a3ff - anthropics/skills · Reconnecting and Tailing
查看此版本的文件8a1541c4a3ff