本文へスキップ
BecomeCoder

C#実践コース · 第9章 AWS SDK for .NET · レッスン54

Amazon SQS ― メッセージキュー連携

ローカル実施

導入

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回来ても大丈夫」な設計(冪等性)にしておくのが鉄則

詳細手順

  1. SQSコンソールでordersキューを作成し、URLを控える
SQSコンソールで標準キューを作成し、キューURLが表示された画面
SQSキューの作成とキューURLの確認
  1. スターター146-aws-sqs/starter.zipを開き、キューURLを設定してF5実行する
  2. 送信→受信→削除の流れと、削除しないと再受信されることを確認する

まとめ

  • SQSはシステム間の非同期メッセージキュー
  • 送信(SendMessage)→受信(ReceiveMessage)→削除(DeleteMessage)
  • 疎結合・負荷平準化に有効。冪等な処理設計が前提

次回: サーバー管理なしでC#を動かすAWS Lambdaです。

テンプレート構成(教材制作用メモ)

146-aws-sqs/
└── starter.zip   # AWSSDK.SQS導入済み / 送受信TODO / README