📬
メッセージキュー
キューによる非同期タスク処理
Message QueueはPub/Subとは異なり、メッセージが正確に1つのコンシューマーにのみ配信されます(ポイント・ツー・ポイント)。キューがバッファとして機能し、プロデューサーとコンシューマーの処理速度の差を吸収し、コンシューマーがダウンしてもメッセージがキューに保存されます。
構造ダイアグラム
📝
Producer
メッセージ生産者
① enqueue
→
📬
Message Queue
msg3
msg2
msg1
FIFO →
② dequeue
→
⚙️
Consumer A
③ 処理 + ACK
⚙️
Consumer B
待機中
Point-to-Point: 各メッセージは正確に 1つの Consumerのみが処理
フロー説明
- Producerがメッセージをキューにenqueue
- メッセージがキューに保存(FIFO順序で待機)
- Consumerがメッセージをdequeueして処理
- 処理完了後ACK送信、キューからメッセージ削除
動作フロー
1
プロデューサーがメッセージをキューにenqueue
2
メッセージがキューに保存されて待機(FIFO)
3
コンシューマーがキューからメッセージをdequeue
4
コンシューマーが処理完了後にACKを送信、キューからメッセージを削除
メリット
- ✓ メッセージ喪失防止(永続性)
- ✓ 処理速度差の吸収(バッファ)
- ✓ 失敗時の再処理が可能
- ✓ コンシューマーの水平スケーリングが容易
デメリット
- ✗ 遅延が発生(非同期)
- ✗ キューのモニタリングが必要
- ✗ メッセージ順序保証が困難な場合がある
- ✗ Dead Letter Queueの管理が必要
ユースケース
Sidekiq / Resque(Railsバックグラウンドジョブ)
RabbitMQ
AWS SQS
メール送信キュー
画像/動画エンコーディングキュー