入队
Enqueue
高级通用入队(Enqueue)是把一项待处理任务或消息放进队列,等消费者稍后取出处理。它让接收请求和执行耗时工作分开:例如用户上传视频后,网站先把转码任务入队,再由后台处理。
你可能会说:「用户上传视频后,页面先告诉他已收到,转码交给后台慢慢做,别让他一直等。」
动手看看上传视频后,转码任务先入队
1
用户点击上传,页面把视频交给网站服务。转码比较耗时,不适合让这次请求一直等着。
要点入队之后,任务会怎么走?
- 1
放进去的是待处理的消息
你把转码任务入队时,放进去的通常是视频 ID、任务类型等处理所需的信息,而不是在这一步完成转码。这样消费者拿到消息后,才知道要处理哪个视频。
- 2
入队成功不等于任务完成
接口返回“任务已接收”,只说明任务进入了后续处理流程,不能告诉用户“转码完成”。因为消费者还可能排队、执行失败,所以产品里最好把处理中、完成和失败分开显示。
- 3
先想清楚重复提交怎么办
用户连点两次,或接口超时后重试,都可能让同一任务入队多次。你可以给任务一个业务标识,并让后续处理能识别重复请求,这样才不容易重复发通知或重复扣费。
容易混淆的地方
入队是“把待处理事项交给队列”,不是“已经把事做完”;真正执行工作的是后续取到消息的消费者。它也不等于写入数据库:数据库写入侧重保存数据,入队侧重安排后续处理。一个流程可以两者都做,比如先保存上传记录,再把转码任务入队。
什么时候用
适合用
- 用户上传视频后要转码:先返回任务已接收,再让后台消费者处理视频。
- 后台批量导入商品时,每个文件需要花时间解析,先入队再展示处理进度。
- AI 工具生成长报告可能耗时较久,先将生成任务入队,让用户稍后查看结果。
不适合用
- 登录时要立刻验证密码并决定能否进入页面,这一步直接处理并返回结果更合适。
- 用户只是在设置页修改昵称,保存后立即读取即可;直接写数据库,不必为这次修改建队列。
- 表单输入时要即时提示邮箱格式是否正确,在前端校验即可,不需要把每次输入入队。
练一练选一个答案,看看解释
你在做视频上传网站。转码通常要花几分钟,用户上传完成后希望立刻离开页面,之后再查看结果。接口接到上传请求后,哪种做法最符合“入队”?
让 AI 帮你做复制给 AI Agent 直接用
请为视频上传接口设计转码任务入队流程:上传记录保存后返回任务 ID 和“处理中”状态,由消费者执行转码并更新结果。说明入队成功与转码完成如何区分,以及重复提交时如何避免重复处理。