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

ApsaraMQ for RocketMQ:注文メッセージ

最終更新日:Jul 09, 2024

順序付けられたメッセージは、送信された順序と同じ順序で消費されます。 送信された最初のメッセージは最初のメッセージとして使用され、次に送信されたメッセージは後で使用されます。 ほとんどの場合、順序付きメッセージは、厳密なメッセージ順序を必要とするシナリオで使用されます。 たとえば、金融および証券業界、電子商取引ビジネスなどです。 このトピックでは、ApsaraMQ for RocketMQの用語、使用シナリオ、動作メカニズム、および順序付きメッセージの使用に関する注意事項について説明します。

注文メッセージとは何ですか?

注文メッセージは、ApsaraMQ for RocketMQによって提供されるメッセージの一種です。 このタイプのメッセージは、トピック内で先入れ先出し (FIFO) の順序で発行および使用されます。 最も早く発行されたメッセージが最初のメッセージとして消費されます。

順序付けられたメッセージは、部分的に順序付けられたメッセージとグローバルに順序付けられたメッセージに分類される。 部分的に順序付けられたメッセージの詳細については、「部分的に順序付けられたメッセージ」をご参照ください。 グローバルに順序付けられたメッセージの詳細については、「グローバルに順序付けられたメッセージ」をご参照ください。

部分的に順序付けられたメッセージ

特定のトピック内のすべてのメッセージは、シャーディングキーに基づいて分割されます。 各パーティションのメッセージは、FIFOの順序で発行され、消費されます。 FIFO順序は、同じパーティション内のメッセージにのみ適しています。 パーティション間のメッセージの公開と消費に制限はありません。

  • シナリオ

    部分的に順序付けられたメッセージは、高いパフォーマンスが必要なシナリオで使用されます。 各パーティションのメッセージは、FIFOの順序で発行および消費される必要があります。

    • ユーザー登録に確認コードが必要で、ユーザーIDがシャーディングキーとして使用されている場合、同じユーザーから送信されたメッセージは公開され、FIFOの順序で使用されます。

    • 電子商取引のシナリオでは、注文IDがシャーディングキーとして使用される場合、同じ注文の作成、支払い、および返金に関するメッセージが公開され、FIFO注文で消費されます。

Alibaba Groupのすべての内部電子商取引システムは、部分的に順序付けられたメッセージを使用して、安定したパフォーマンスを確保し、オンライン注文が順番に処理されます。

グローバルに順序付けられたメッセージ

トピック内のすべてのメッセージは、FIFOの順序で発行および使用されます。

  • シナリオ

    グローバルに順序付けられたメッセージは、パフォーマンス要件が高くないシナリオで使用されますが、すべてのメッセージをFIFO順序で発行および消費する必要があります。

  • トピックがRMBからUSDへの取引である証券処理シナリオでは、複数の取引の入札価格が同じである場合、第1の入札者によって開始される取引は第1の取引として処理されなければならない。 この場合、システムは、グローバルFIFO順序でトピック内のメッセージを発行および消費できます。

説明

グローバルに順序付けられたメッセージは、トピックレベルのパーティションが1つだけの部分的に順序付けられたメッセージと見なすことができます。 グローバルに順序付けられたメッセージは、部分的に順序付けられたメッセージと同じ方法で機能する。 グローバルに順序付けられたメッセージと比較して、複数のパーティションを使用して部分的に順序付けられたメッセージを格納するため、部分的に順序付けられたメッセージをより高速に並列処理できます。

順序付けられたメッセージはどのように機能しますか?

グローバルに順序付けられたメッセージは、部分的に順序付けられたメッセージと同じ方法で機能する。 次のセクションでは、ApsaraMQ for RocketMQでメッセージが同じ順序で送信および使用されるようにする方法について説明します。 この例では、部分的に順序付けられたメッセージが使用される。 Ordered messages 1.0

ApsaraMQ for RocketMQでメッセージがFIFOの順序で送信されて消費されるようにするには、次のフェーズに注意する必要があります。

  • メッセージ送信

    前の図では、注文AおよびBのメッセージは、A1、B1、A2、A3、B2、およびB3の順序で生成されます。 同じ順序のメッセージは、メッセージが生成されるのと同じ順序で送信および消費されなければならない。 たとえば、注文Aのメッセージは、A1、A2、およびA3の順序で送信され、消費される。 注文Aの通常のメッセージは、ポーリングモードで異なるキューに送信されてもよい。 通常のメッセージの元の順序をキューに保持することはできません。 同じ注文IDなど、同じシャーディングキーを使用する注文メッセージは、ApsaraMQ for RocketMQの同じキューに順番にルーティングされます。

    ApsaraMQ for RocketMQブローカーは、同じプロデューサーによってメッセージが生成された時間順序を使用してメッセージの順序を決定します。 ApsaraMQ for RocketMQブローカーは、異なるプロデューサーまたはスレッドによって並行して送信されるメッセージの順序を判断できません。

  • メッセージ保存

    上の図に示すように、順序付けられたメッセージのトピック内の各論理パーティションは、物理パーティションに対応します。 メッセージが順番に論理区画に送信されると、メッセージは同じ順番で対応する物理区画に格納される。

  • メッセージ消費

    ApsaraMQ for RocketMQは、メッセージが保存されている順序でコンシューマーにメッセージを配信します。 次いで、消費者は、最も早く受信したメッセージからのメッセージを消費する。

    コンシューマーがメッセージを消費する場合、同じシャーディングキーを含むメッセージは単一のスレッドを使用して消費されます。 これは、メッセージ消費順序とメッセージ格納順序との間の一貫性、およびメッセージ消費順序とメッセージ発行順序との間の一貫性を保証するのに役立つ。

使用上の注意

  • 各グループIDは、トピックタイプに対応する。 グループIDを使用して、順序付けられたメッセージと順序付けられていないメッセージの両方を送受信できません。

  • グローバルに順序付けられたメッセージを含むキューが輻輳しないようにすることを推奨します。 複数のインスタンスを同時に実行して、ビジネスの継続性を確保できます。 アクティブなインスタンスに障害が発生した場合、システムはフェールオーバーを実行して別のインスタンスに切り替えてビジネスを処理します。 これにより、ビジネスのサービスの中断を防ぐことができます。 毎回アクティブなインスタンスは1つだけです。

  • ApsaraMQ for RocketMQブローカーは、送信者が単一のプロデューサーと単一のスレッドを使用して同時にメッセージを送信する順序に基づいて、メッセージが生成される順序を決定します。 送信者が複数のプロデューサまたは複数のスレッドを使用してメッセージを並行して送信する場合、メッセージの順序は、ApsaraMQ for RocketMQブローカーが受信したメッセージの順序に基づいて決定されます。 この順序は、メッセージが送信される順序とは異なってもよい。

よくある質問

  • 単一のメッセージは、順序付けられたメッセージ、スケジュールされたメッセージ、およびトランザクションメッセージにできますか?

    単一のメッセージを順序付けられたメッセージ、スケジュールされたメッセージ、またはトランザクションメッセージにすることはできません。 順序付けられたメッセージ、スケジュールされたメッセージ、およびトランザクションメッセージは、異なる、相互に排他的なメッセージタイプである。

  • 注文されたメッセージを使用できるリージョンは何ですか?

    注文されたメッセージは、ApsaraMQ for RocketMQが利用可能なすべてのAlibaba CloudリージョンとFinance Cloudリージョンでサポートされます。

  • グローバルに順序付けられたメッセージのパフォーマンスが高くないのはなぜですか?

    グローバルに順序付けられたメッセージは、FIFO順序で処理される。 メッセージが消費されない場合、次のメッセージはトピックキューに残り、処理できません。 グローバルに順序付けられたメッセージの1秒あたりのトランザクション (TPS) を改善するには、インスタンス設定をアップグレードし、メッセージクライアント上のアプリケーションがローカルビジネスロジックを処理するために必要な時間が短いことを確認します。

  • 注文メッセージはどの送信モードをサポートしますか?

    順序付けられたメッセージは、厳密なメッセージ順序を保証する信頼できる同期伝送モードのみをサポートする。 非同期送信はサポートされていません。

  • 順序付けられたメッセージはクラスタリング消費とブロードキャスト消費をサポートしますか?

    順序付けられたメッセージはクラスタリング消費をサポートしますが、ブロードキャスト消費はサポートしません。

TCPクライアントSDKを使用するためのサンプルコード

TCPサンプルコードの詳細については、次のドキュメントを参照してください。

HTTPクライアントSDKのサンプルコード