すべてのプロダクト
Search
ドキュメントセンター

Simple Message Queue (formerly MNS):順序付きメッセージ

最終更新日:Jun 21, 2026

Simple Message Queue (旧称:MNS) は、順序付きメッセージをサポートしています。このトピックでは、主要な概念、標準メッセージとの違い、作成および使用方法、API の手順、関連する制限とベストプラクティスについて説明します。

機能の定義

Simple Message Queue (旧称:MNS) は、同一グループ内のメッセージに対して FIFO (先入れ先出し) 処理を提供し、ビジネスシナリオにおける順次処理を保証します。

シナリオ

順序付きメッセージは、厳密なメッセージ順序を必要とするビジネスシナリオに適しています。

  • 注文ステータスの遷移

    Eコマースの注文システムでは、注文の作成 → 支払い → 発送 → 配達確認などの状態は、正しいビジネス状態を維持するために時系列順に処理される必要があります。

  • 金融取引処理

    証券や株式の取引システムでは、同一の買値を持つ注文は、発注された順序に厳密に従って処理される必要があります。下流システムは、これらの注文をその発注順序に従って処理する必要があります。

  • データベース同期

    上流のデータベースは、挿入、削除、または更新操作を実行します。バイナリ操作ログはメッセージとして下流システムに送信され、下流システムはそれを再生して状態データを順次更新し、データの不整合を回避します。

  • 業務ログの記録

    重要な業務操作のログは、監査やトラブルシューティングをサポートするために、厳密に時系列順で保存される必要があります。

基本概念

  • MessageGroupId:メッセージグループの識別子です。システムは各グループ内のメッセージの順序を保証します。同じ MessageGroupId を持つメッセージは厳密に順序通りに処理され、異なるグループのメッセージは並行して処理できます。

  • 可視性タイムアウト:メッセージが正常に取得された後、タイムアウトが切れるまで他のコンシューマーには見えなくなります。これにより、複数のコンシューマーが同じメッセージを同時に処理することを防ぎます。タイムアウト前にメッセージが削除確認されない場合、再び可視状態になります。

  • グループのロックメカニズム:順序付きキューでは、特定の MessageGroupId を持つメッセージが取得されたが削除確認されていない (つまり、不可視のままである) 場合、同じ MessageGroupId 内の後続のすべてのメッセージはブロックされます。これにより、厳密な消費順序が保証されます。現在のメッセージが削除確認されるか、その可視性タイムアウトが切れた後にのみ、同じグループの次のメッセージを取得できます。

標準メッセージとの違い

  • 順序セマンティクス:

    • 標準メッセージ (標準キュー/トピック):ベストエフォートで少なくとも1回配信されますが、順序は保証されません。

    • 順序付きメッセージ (FIFO キュー/トピック):同じ MessageGroupId 内で、メッセージはサーバーに到着した順序で厳密に消費されます。後のメッセージが消費される前に、先のメッセージが完全に処理される必要があります。

  • 同時実行モデル:

    • 標準メッセージ:グルーピングの制限はなく、全体的なスループットに最適化されています。

    • 順序付きメッセージ:MessageGroupId を同時実行の単位として使用します。グループ内では直列処理、グループ間では並列処理です。

  • メッセージ要件:

    • 順序付きメッセージを送信するには、MessageGroupId を指定する必要があります (キューとトピックの両方に適用されます)。

クイックスタート

FIFO キュー

  • キューの作成:

    1. MNS コンソールにログインします。
    2. 左側のナビゲーションウィンドウで、キュー をクリックします。
    3. ナビゲーションバーの上部でリージョンを選択します。
    4. [キュー] ページの右上角にある キューの作成 をクリックします。
    5. キューを作成 パネルで、キュータイプシーケンシャルキュー に設定し、他のパラメーターを構成してから OK をクリックします。

      その他の設定可能なパラメーターには、[Maximum message size]、[Long polling period]、[Message visibility timeout]、[Message retention period]、[Message delay time]、[Enable logging]、[Dead-letter policy]、[Rate limiting policy] があります。

  • メッセージの送信:

    • SendMessage を使用し、MessageGroupId を含めます。注文 ID のような安定したビジネスキーを使用します。

    • MessageGroupId を省略した場合、システムはエラーコード FifoMissingMessageGroupId を返します。

  • 受信と確認:

    • ReceiveMessage を使用してメッセージを取得します。応答には MessageGroupId が含まれます。処理後、DeleteMessage を呼び出して確認します。

FIFO トピック

  • トピックの作成:

    1. MNS コンソールにログインします。
    2. 左側のナビゲーションウィンドウで、トピック をクリックします。
    3. ナビゲーションバーの上部でリージョンを選択します。
    4. トピック ページで、トピックの作成 をクリックします。

    5. トピックの作成 パネルで、トピックタイプシーケンシャルトピック に設定し、他のパラメーターを構成してから OK をクリックします。

  • サブスクリプションの作成:

    メッセージの順序を保証するために、FIFO キューにサブスクライブします。標準トピックは標準キューのみをサブスクライブできます。詳細については、「手順3:サブスクリプションの作成」をご参照ください。

  • メッセージの公開:

    • PublishMessage を使用し、MessageGroupId を含めます。

    • MessageGroupId を省略した場合、システムはエラーコード FifoMissingMessageGroupId を返します。

  • 消費と確認:

    • サブスクライブした FIFO キュー側で、ReceiveMessage を使用してメッセージを取得し、DeleteMessage を使用して確認することで、各グループ内での順次処理を維持します。

API の使用

キュー関連の API

API名

パラメーターの説明

戻り値の説明

CreateQueue-キューの作成

入力パラメーター QueueType

  • normal (標準キュー)

  • fifo (FIFO キュー)

指定されたタイプのキューを作成します。

GetQueueAttributes-キュー属性の取得

特になし

QueueType フィールドを含むキュー情報を返します。

ListQueue-Alibaba Cloudアカウント配下のすべてのキューを一覧表示

特になし

キューのリストを返します。各キューには QueueType フィールドが含まれます。

トピック関連の API

API名

パラメーターの説明

戻り値の説明

CreateTopic-トピックの作成

入力パラメーター TopicType

  • normal (標準トピック)

  • fifo (FIFO トピック)

指定されたタイプのトピックを作成します。

GetTopicAttributes-トピック属性の取得

特になし

TopicType フィールドを含むトピック情報を返します。

ListTopic-Alibaba Cloudアカウント配下のトピックを一覧表示

特になし

トピックのリストを返します。各トピックには TopicType フィールドが含まれます。

メッセージ送受信 API

API名

パラメーター要件

戻り値の説明

SendMessage

FIFO キューには MessageGroupId が必要です。

標準レスポンス。

単一のメッセージをキューに送信します。

BatchSendMessage

FIFO キューには MessageGroupId が必要です。

標準レスポンス。

複数のメッセージをバッチでキューに送信します。

PublishMessage

FIFO トピックには MessageGroupId が必要です。

標準レスポンス。

メッセージをトピックに公開します。

ReceiveMessage

特になし。

応答本文には MessageGroupId が含まれます。

キューから単一のメッセージを受信します。

BatchReceiveMessage

numOfMessages パラメーターをサポートします。

応答本文には MessageGroupId が含まれます。

複数のグループからのメッセージを返す場合があります。各グループ内では順序が維持されます。

制限

  • サポートされているリージョンは、中国 (深セン)、中国 (上海)、および中国 (杭州) です。他のリージョンでの FIFO サポートをリクエストするには、 チケットを起票してください

  • グループIDが必須:FIFO キューまたはトピックにメッセージを送信するには、MessageGroupId が必要です。

  • タイプの互換性:

    • デッドレターキュー (DLQ):同じタイプのキューのみがバインドできます。FIFO メッセージは FIFO デッドレターキューにのみバインドでき、標準メッセージは標準デッドレターキューにのみバインドできます。

    • サブスクリプション:標準トピックは標準キューにのみサブスクライブできます。順序付き配信のためには、FIFO トピックを FIFO キューにサブスクライブします。

  • ピークはサポートされていません:FIFO キューはメッセージのピークインターフェイス (PeekMessage) をサポートしていません。

ベストプラクティス

  • グループ設計

    • 安定していて均等に分散された MessageGroupId の値 (注文 ID など) を使用して、少数のホットスポットグループがパフォーマンスボトルネックになるのを防ぎます。

    • 極端なホットスポットワークロードの場合は、アプリケーションレイヤーでグループを細分化して同時実行性を高めます。

  • 可視性タイムアウト:実際の処理時間に基づいてこれを設定し、タイムアウト前にアプリケーションが処理を完了してメッセージを確認できるようにすることで、重複配信を減らします。

  • べき等性とリトライ:コンシューマーにべき等処理とリトライロジックを実装して、エンドツーエンドの一貫性を確保します。

  • バッチ受信:メッセージごとの処理遅延が許容範囲内である限り、numOfMessages を増やしてスループットを向上させます。

よくある質問

順序はどのように定義されますか?

同じ MessageGroupId を持つメッセージは、送信順に厳密に配信および処理されます。異なるグループのメッセージは並行して処理できます。

MessageGroupId は必須ですか?

はい。FIFO キューまたはトピックにメッセージを送信するには、MessageGroupId が必要です。これがないと、順序を保証できません。

FIFO と標準のキュー/トピックはどのように選択すればよいですか?

ビジネスで厳密な順序 (注文ステータスの遷移など) が必要な場合は、FIFO キューまたはトピックを使用します。全体的なスループットと弾力性を優先し、メッセージの順序が不要な場合は、標準キューまたはトピックを使用します。開始するには、コンソールで シーケンシャルキュー または シーケンシャルトピック を作成し、送信時に MessageGroupId を含め、コンシューマー側でこの属性を読み取って順序付き処理と確認を行います。