消息队列Message Queue
你可能会说
导出大报表要等很久,能不能先给我一个任务编号,让后台慢慢生成,并在页面上看到等待、处理中、完成或失败?
在发送方与处理方之间暂存待处理消息,让双方不必同时在线或同步等待的通信与解耦机制。·例如用户导出大报表时,接口先创建任务,把任务 ID 和生成要求写入消息队列,再立即返回“等待处理”。后台 Worker 按能力取出任务、生成文件,并把同一个任务 ID 更新为 completed 或 failed。入队成功只代表队列收到了消息,不代表文件已经生成;发生重试时,同一任务还可能被再次处理。
也常被叫作MQMessage Broker消息中间件消息代理异步任务队列
消息队列如何暂存任务并平稳分发
任务编号:未生成
导出页面点击“导出账单”
消息队列尚未接入
生成文件占用当前请求处理
页面状态持续等待,可能超时
可观察证据请求在文件生成期间一直未结束,页面没有可供后续查询的任务编号
耗时工作和页面请求绑在一起;一旦等待中断,用户难以判断任务是否仍在继续。
一次报表导出怎样经过消息队列
失败前:页面一直等后台做完:用户点击导出后,请求同时查询数据、生成文件并上传存储。只要其中一步很慢,页面就会长时间转圈甚至超时,而且用户拿不到一个可以继续查询的任务状态。
接入队列,并用任务编号反馈状态:接口创建 export_104,把参数和编号写入队列后返回页面;工作进程领取它时更新为处理中,成功则记录文件地址,失败则记录可读原因。页面始终用同一个编号显示排队中、处理中、已完成或失败。入队只表示已受理,不表示文件已经生成。
改善证据:四处记录能够对上:验收时核对接口响应、队列消息、工作进程日志和页面最终状态都包含 export_104。还要重试一次失败任务,确认不会因重复消费生成两份文件;只有一条“消息已入队”日志不能证明任务完成。
你可以这样告诉 AI Agent
“这个 Excel 导出会让请求等待很久。请改成异步任务:接口创建任务并写入消息队列,立即返回任务 ID;Worker 用同一个 ID 更新 queued、processing、completed 或 failed,前端据此查询状态。请让重复消费不会生成两份文件,并分别验收正常完成和 Worker 失败后的状态。
接下来学什么
延伸阅读 · 权威出处
快速练习