導入
Amazon SQS(Simple Queue Service)は、システム間でメッセージを非同期にやり取りするキューです。「注文を受け付けたら、決済処理は後続のワーカーに任せる」といった、処理の分離・非同期化・負荷平準化に使います。
図解
flowchart LR
P["送信側(Producer)<br/>注文を受け付け"] -->|SendMessage| Q["SQS キュー"]
Q -->|ReceiveMessage| C["受信側(Consumer)<br/>決済ワーカー"]
C -->|DeleteMessage(処理完了)| Q
style Q fill:#fff3e0
サンプル(読み物)
using Amazon.SQS;
using Amazon.SQS.Model;
var sqs = new AmazonSQSClient(Amazon.RegionEndpoint.APNortheast1);
string queueUrl = "https://sqs.ap-northeast-1.amazonaws.com/123456789012/orders";
// 送信側: メッセージをキューに入れる
await sqs.SendMessageAsync(queueUrl, "{\"orderId\":1001}");
// 受信側: キューからメッセージを取り出して処理
var received = await sqs.ReceiveMessageAsync(queueUrl);
foreach (var msg in received.Messages)
{
Console.WriteLine($"処理: {msg.Body}");
// 処理が完了したら削除する(消さないと再配信される)
await sqs.DeleteMessageAsync(queueUrl, msg.ReceiptHandle);
}
- 送信側は
SendMessageAsyncでキューに投入、受信側はReceiveMessageAsyncで取り出す - 処理が終わったら
DeleteMessageAsyncで消す(消さないと一定時間後に再配信される=少なくとも1回配信) - 送信側と受信側が疎結合になり、片方が混雑してもキューが緩衝材になる(負荷平準化)
- 「同じメッセージが2回来ても大丈夫」な設計(冪等性)にしておくのが鉄則
詳細手順
- SQSコンソールで
ordersキューを作成し、URLを控える
- スターター
146-aws-sqs/starter.zipを開き、キューURLを設定してF5実行する - 送信→受信→削除の流れと、削除しないと再受信されることを確認する
まとめ
- SQSはシステム間の非同期メッセージキュー
- 送信(
SendMessage)→受信(ReceiveMessage)→削除(DeleteMessage) - 疎結合・負荷平準化に有効。冪等な処理設計が前提
次回: サーバー管理なしでC#を動かすAWS Lambdaです。
テンプレート構成(教材制作用メモ)
146-aws-sqs/
└── starter.zip # AWSSDK.SQS導入済み / 送受信TODO / README