Queues
概要
コーヒーショップを思い浮かべてください。カウンターで注文してその場を離れると、バリスタが注文票を一枚ずつ片づけていきます。キューとは、その注文票の列のことです。Cloudflare Queues は、この発想の上に作られた、Workers のためのマネージドなメッセージキューです。ある Worker がメッセージをキューに積み(プロデューサー。注文を受けるレジ係のようなもの)、別の Worker がそれらのメッセージのバッチとともに呼び出されて処理します(コンシューマー。バリスタのようなもの)。これにより、遅かったり不安定だったりする作業を、それを引き起こしたリクエストから切り離せます — リクエストは素早く受け付け、作業はバックグラウンドで行うのです。
強み
- プロデューサーとコンシューマーを分離し、トラフィックの急増をならします。
- 自動的なバッチ処理、リトライ、そしてデッドレターキュー(dead-letter 。失敗し続けるメッセージを溜めておく待機場所)により、何も静かに失われることがありません。
- 純粋な Workers 統合 — プロデューサーもコンシューマーも、どちらもバインディングを持つ Workers です。
- 運用するインフラがありません。トラフィックに応じてスケールします。
- 少なくとも 1 回の配信を保証するため、メッセージがこっそり失われることはありません。
トレードオフ
- 少なくとも 1 回の配信ということは、コンシューマーは冪等であるべき(。同じメッセージを 2 回処理しても害がなく安全なこと。重複を処理できる)ということです。
- 即時の同期レスポンス向けではありません — 作業は非同期に行われます。
- 順序はベストエフォートであり、厳密なグローバル順序ではありません。
- スループットとメッセージサイズには、設計時に考慮すべき上限があります。
使うべきとき
バックグラウンドジョブに Queues を使いましょう。メールの送信、アップロードの処理、遅いサードパーティ (アプリケーション・プログラミング・インターフェース。ほかのサービスとやり取りするために使うエンドポイント)の呼び出し、 のファンアウト、書き込みのバッファリング — ユーザーを待たせたくないもの全般。
バイブコーディングとの相性
Queues は、エージェントがブローカーを立ち上げることなくバックグラウンド処理を追加するためのきれいな方法です。コンシューマーを冪等にする(メッセージキーを使う)こと、そして失敗が可視になるようデッドレターキューを設定することを依頼しましょう。次の設定は、1 つの 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