📬

メッセージキュー

キューによる非同期タスク処理

Message QueueはPub/Subとは異なり、メッセージが正確に1つのコンシューマーにのみ配信されます(ポイント・ツー・ポイント)。キューがバッファとして機能し、プロデューサーとコンシューマーの処理速度の差を吸収し、コンシューマーがダウンしてもメッセージがキューに保存されます。

構造ダイアグラム

📝
Producer
メッセージ生産者
① enqueue
📬
Message Queue
msg3 msg2 msg1
FIFO →
② dequeue
⚙️
Consumer A
③ 処理 + ACK
⚙️
Consumer B
待機中
Point-to-Point: 各メッセージは正確に 1つの Consumerのみが処理
フロー説明
  1. Producerがメッセージをキューにenqueue
  2. メッセージがキューに保存(FIFO順序で待機)
  3. Consumerがメッセージをdequeueして処理
  4. 処理完了後ACK送信、キューからメッセージ削除

動作フロー

1

プロデューサーがメッセージをキューにenqueue

2

メッセージがキューに保存されて待機(FIFO)

3

コンシューマーがキューからメッセージをdequeue

4

コンシューマーが処理完了後にACKを送信、キューからメッセージを削除

メリット

  • メッセージ喪失防止(永続性)
  • 処理速度差の吸収(バッファ)
  • 失敗時の再処理が可能
  • コンシューマーの水平スケーリングが容易

デメリット

  • 遅延が発生(非同期)
  • キューのモニタリングが必要
  • メッセージ順序保証が困難な場合がある
  • Dead Letter Queueの管理が必要

ユースケース

Sidekiq / Resque(Railsバックグラウンドジョブ) RabbitMQ AWS SQS メール送信キュー 画像/動画エンコーディングキュー