队列
一个**队列(queue)**让你能说"稍后再做这件事",而不是"现在就做这件事"。当一个用户注册时,你不想让他们一边等着你发送欢迎邮件、调整他们的头像尺寸。把这些任务推到一个队列里(RabbitMQ、BullMQ、Cloudflare Queues、SQS);一个后台 worker 会把它们取走。用户得到一个即时的响应。
对任何缓慢的、可能失败并重试的,或者不需要在你响应用户之前完成的任务,都使用队列。
大多数初学者会撞上的坑是,一个入队的任务可能运行不止一次——一次网络抖动让 worker 重试,于是欢迎邮件就发了两遍。修复办法是让任务幂等(idempotent):把它们设计成运行同一个任务两次与运行一次效果相同(发送前先检查"我是不是已经发过了?")。也要预先决定,一个反复失败的任务该怎么办;成熟的队列会把它路由到一个死信队列,这样一条毒消息就不会把排在它后面的一切都堵死。