返回知识库

数据与服务 · 服务与数据

消息队列Queue

消息队列是中间的工单轨道:投递即可走,ack 才摘票,失败可重投,不静默丢。

先认出这条工单轨道,再看票会不会丢

下面就是生产者和消费者中间的那条轨道。默认 #417 已摘下。消费者下线时票仍挂着;三次失败后,死信章盖在同一张票上。

工单轨道 · 导出缩略图已 ack · 票已摘下

#417 已 ack

  • #418 排队
  • #419 排队

投递不被慢任务拖垮;ack 之前票还在。

已 ack · 票已摘下待做和已 ack 都挂在轨道上。

原因:生产者投递即可返回,消费者按节奏摘票。下一步:试「消费者下线」,看票怎样挂在轨道上不丢。

知识点:队列是一次性管道,不是柜子

轨道上的票已经演示了核心关系,这里只给可复用的命名。

  • 投递即可走:生产者不等慢任务做完。
  • ack 才出队:没确认的票还挂着,失败可重投。
  • 削峰:生产快、消费慢,差额先攒在轨道上。
  • 和缓存/数据库的边界:缓存按 key 反复读;库长期可查;队列消费即走。

什么时候用、怎么用

提交要秒回、处理却很慢或会失败时,把活挂到轨道上。

  • 信号:上传后要出缩略图、导出报表、突发流量把接口拖垮。
  • 适用:可异步、可重试、需要削峰或解耦的后台活。
  • 不适用:用户必须当场看到最终结果,或消息要当长期档案查。
  • 最短路径:入队拿 jobId → 消费者拉取 → 成功 ack → 失败重投,三次进死信。

正反例:同一张导出任务,只换放哪

目标都是导出报表,只改同步做完再返回,还是先入队。

正例入队后秒回 jobId

接口不被慢导出拖垮。票挂在轨道上,失败可重投。

反例请求里同步做完

流量一高接口全堵;失败没人重试,任务 silently 丢了。

快速自测

缩略图生成失败了两次,第三次还失败。队列里的这张票该怎样?

继续查证

术语的技术定义和行为以这些一手或权威资料为准。

下一步学

和本知识点经常一起出现的概念。