All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m20s
1.9 KiB
1.9 KiB
统一异步任务与前端轮询契约
业务任务固定使用五态:1=待处理、2=处理中、3=已完成、4=已失败、5=已取消,所有公开投影同时返回中文状态名。各业务继续拥有自己的任务表、任务项和失败明细;公共基础不建设万能任务表。
公开投影至少包含 task_id、状态与状态名、总数、成功数、失败数、进度、安全错误码与中文摘要、开始时间、完成时间和更新时间。业务项到达处理终点时使用“已完成”:部分成功和全部业务项失败均通过计数表达,且必须满足 total_count = success_count + failed_count;只有整体无法建立或执行到业务终点时才使用“已失败”。
领取必须使用 PostgreSQL 预期状态条件更新。待处理任务可以进入处理中;处理中任务保存租约所有者与到期时间,仅过期租约可被其他 Worker 恢复。续租和进入终态都校验当前状态、租约所有者与有效期。队列重复投递遇到终态时直接返回,不制造第二次业务副作用。取消仅适用于业务明确支持的任务,并从待处理或处理中条件更新到已取消。
调用统一 EnqueueTask 时载荷只包含 task_id、必要分片标识和关联标识,并以 struct 或 map 传入;禁止预序列化为 []byte。
前端首次加载显示占位;成功且确实无数据时才显示空态,筛选无结果提供清除筛选入口。403 显示无权限且不提供重试。瞬时失败保留已有数据和输入并提供显式重试。创建成功后持久保存 task_id,刷新或重新进入页面后恢复查询。
待处理或处理中按 2 秒、3 秒、5 秒逐步退避,最长不超过 10 秒;终态停止轮询。页面隐藏时暂停,恢复可见后立即刷新一次,再按最新状态继续。网络恢复和页面刷新不得重新创建任务。