佇列
一個**佇列(queue)**讓你能說"稍後再做這件事",而不是"現在就做這件事"。當一個使用者註冊時,你不想讓他們一邊等著你傳送歡迎郵件、調整他們的頭像尺寸。把這些任務推到一個佇列裡(RabbitMQ、BullMQ、Cloudflare Queues、SQS);一個後臺 worker 會把它們取走。使用者得到一個即時的響應。
對任何緩慢的、可能失敗並重試的,或者不需要在你響應使用者之前完成的任務,都使用佇列。
大多數初學者會撞上的坑是,一個入隊的任務可能執行不止一次——一次網路抖動讓 worker 重試,於是歡迎郵件就發了兩遍。修復辦法是讓任務冪等(idempotent):把它們設計成運行同一個任務兩次與執行一次效果相同(傳送前先檢查"我是不是已經發過了?")。也要預先決定,一個反覆失敗的任務該怎麼辦;成熟的佇列會把它路由到一個死信佇列,這樣一條毒訊息就不會把排在它後面的一切都堵死。