Queues
它是什麼
想像一家咖啡館:你在櫃檯點單後就走開,由咖啡師按一張張訂單票逐一處理。佇列就是那一列訂單票。Cloudflare Queues 正是基於這個想法、為 Workers 提供的託管訊息佇列。一個 Worker 把訊息推入佇列(生產者,就像接單的收銀員);另一個 Worker 則會被以這些訊息的批次形式喚起以處理它們(消費者,就像咖啡師)。這讓你能夠把緩慢或不可靠的工作與觸發它的請求分開——快速接受請求,在後臺完成工作。
優勢
- 把生產者與消費者解耦,抹平流量尖峰。
- 自動批處理、重試,以及死信佇列(dead-letter queue,用來存放屢次失敗的訊息的暫存區),因此不會有任何東西被悄然丟失。
- 純 Workers 整合——生產者和消費者都是帶繫結的 Workers。
- 無需運維基礎設施;隨你的流量擴縮。
- 保證至少一次(at-least-once)投遞,因此訊息不會被悄然丟失。
取捨
- 至少一次投遞意味著消費者應當是冪等的(idempotent,對同一條訊息處理兩次也不會造成危害,是安全的;能處理重複)。
- 不適合即時的同步響應——工作是非同步發生的。
- 順序是盡力而為,並非嚴格的全域性順序。
- 吞吐量和訊息大小有需要圍繞設計的限制。
何時使用
把 Queues 用於後臺作業:傳送郵件、處理上傳、呼叫緩慢的第三方 (應用程式程式設計介面,用來與其他服務通訊的端點)、扇出(fan out)webhook,或緩衝寫入——任何你不願讓使用者等待的事情。
Vibe coding 契合度
對於 agent 來說,Queues 是一種無需架設訊息代理(broker)就能新增後臺處理的清爽方式。讓它把消費者做成冪等的(使用訊息鍵),並設定一個死信佇列以便失敗可見。下面的配置把一個 Worker 同時接成某佇列的生產者和消費者。
# wrangler.toml
[[queues.producers]]
queue = "jobs"
binding = "JOBS"
[[queues.consumers]]
queue = "jobs"
max_batch_size = 10
dead_letter_queue = "jobs-dlq"
npx wrangler queues create jobs
npx wrangler deploy