メッセージキュー
プロデューサーとコンシューマーを非同期に接続し、メッセージを一時的に保持する通信基盤
メッセージキューとは
メッセージキュー (Message Queue) は、プロデューサー (送信者) とコンシューマー (受信者) を非同期に接続し、メッセージを一時的に保持する通信基盤である。SQS が AWS の代表的なメッセージキュー。
同期 vs 非同期 (キュー)
同期と 非同期 (キュー) の違いを図で示す。
同期:
API → 処理 (5秒) → レスポンス
→ ユーザーが 5 秒待つ
非同期 (キュー):
API → SQS にメッセージ送信 → レスポンス (即座)
SQS → Lambda (バックグラウンドで処理)
→ ユーザーは待たない
メッセージキューのメリット
重い処理をバックグラウンドに回す非同期処理が可能になり、トラフィックの急増をバッファリングで吸収できる。プロデューサーとコンシューマーが独立するため疎結合になり、失敗したメッセージの自動リトライも実現できる。コンシューマーを増やすだけで並列処理をスケールできる。
SQS vs SNS vs EventBridge
SQS と SNS vs EventBridge の違いを以下にまとめる。
| サービス | パターン | 用途 |
|---|---|---|
| SQS | キュー (1 対 1) | バックグラウンド処理 |
| SNS | Pub/Sub (1 対多) | ファンアウト通知 |
| EventBridge | イベントバス (1 対多) | イベント駆動、フィルタリング |
SQS Standard vs FIFO
SQS Standard と FIFO の違いを以下にまとめる。
| 観点 | Standard | FIFO |
|---|---|---|
| 順序 | ベストエフォート | 厳密な順序保証 |
| 重複 | At-least-once | Exactly-once |
| スループット | ほぼ無制限 | 300 msg/秒 (バッチで 3,000) |
| 用途 | 一般的な非同期処理 | 順序が重要な処理 |
デッドレターキュー (DLQ)
デッドレターキュー (DLQ) を図で示す。
メッセージ処理失敗 (1 回目) → リトライ
メッセージ処理失敗 (2 回目) → リトライ
メッセージ処理失敗 (3 回目) → DLQ に移動
→ DLQ のメッセージを調査・再処理
詳しくは関連書籍を参照。
この記事は役に立ちましたか?
関連用語
SNS と SQS
AWS のメッセージングサービスで、SNS がパブリッシュ/サブスクライブ、SQS がメッセージキューを提供する
SQS FIFO キュー
メッセージの順序保証と厳密な 1 回配信を提供する Amazon SQS のキュータイプ
キューワーカー
メッセージキューからタスクを取り出して非同期に処理するバックグラウンドプロセス
デッドレターキュー
処理に失敗したメッセージを退避させ、後から調査・再処理するためのキュー
Pub/Sub
発行者と購読者が直接通信せず、メッセージブローカーを介して非同期にメッセージを交換するパターン
SNS ファンアウト
SNS トピックから複数の SQS キューや Lambda に同時配信し、1 つのイベントで複数の処理を並行実行するパターン
関連する記事
エラーメッセージを読めるエンジニアは何が違うのか
エラーが出たときに冷静に原因を特定できる人と、パニックになる人。その差は経験だけでなく、読んできた本の種類にあります。デバッグ力を支える読書の傾向を分析します。
セキュリティ本ガイド - Web 開発者が読むべき技術書の選び方
Web セキュリティの基礎から実践まで学べる技術書の選び方マトリクスと、読了後にやるべき 3 つのアクションを紹介します。
技術書の読書ログを GitHub で管理する - エンジニアらしい記録法
技術書の読書記録を GitHub リポジトリで管理する方法を紹介します。Markdown で読書ノートを書き、コミット履歴で読書の軌跡を残す、エンジニアならではの読書ログ術です。