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

ApsaraMQ for RocketMQ:順序メッセージ

最終更新日:Apr 17, 2025

順序メッセージは、送信された順序と同じ順序でコンシュームされます。最初に送信されたメッセージが最初のメッセージとしてコンシュームされ、次に送信されたメッセージは後でコンシュームされます。ほとんどの場合、順序メッセージは、メッセージを生成された順序でコンシュームする必要があるシナリオで使用されます。たとえば、順序メッセージは、金融証券やeコマースの分野で頻繁に使用されます。このトピックでは、RocketMQ for ApsaraMQにおける順序メッセージの用語、シナリオ、動作メカニズム、および使用上の注意について説明します。

順序メッセージとは

順序メッセージは、RocketMQ for ApsaraMQによって提供されるメッセージの種類です。このタイプのメッセージは、Topic 内で先入れ先出し(FIFO)の順序で公開およびコンシュームされます。最初に公開されたメッセージが最初のメッセージとしてコンシュームされます。

パーティション順序メッセージ

特定のTopic 内のメッセージは、シャーディングキーに基づいてパーティション化されます。各パーティション内のメッセージは、FIFO 順に公開およびコンシュームされます。 FIFO 順序は、同じパーティション内のメッセージにのみ適用されます。パーティションをまたがるメッセージは、FIFO 順にコンシュームする必要はありません。

  • シナリオ

    パーティション順序メッセージは、高パフォーマンスが必要であり、各パーティション内のメッセージ(シャーディングキーを使用して区別される)をFIFO 順に公開およびコンシュームする必要があるシナリオに適しています。

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

    • eコマースの注文を作成するときに注文IDをシャーディングキーとして使用する場合、同じ注文の作成、支払い、および返金に関するメッセージはFIFO 順に公開およびコンシュームされます。

Alibaba グループ内のすべての社内 eコマースシステムは、パーティション順序メッセージを使用して、安定したパフォーマンスとオンライン注文の順次処理を保証しています。

動作メカニズム

このセクションでは、RocketMQ for ApsaraMQでメッセージの順序を確保する方法について説明します。顺序消息1.0

RocketMQ for ApsaraMQでメッセージがFIFO 順に送受信されるようにするには、次のフェーズに注意してください。

  • メッセージの公開

    前の図では、注文 A と B のメッセージは、A1、B1、A2、A3、B2、B3 の順序で生成されます。同じ注文のメッセージは、生成された順序と同じ順序で送受信される必要があります。たとえば、注文 A のメッセージは、A1、A2、A3 の順序で送受信されます。注文 A の通常のメッセージは、ポーリングモードで異なるキューに送信される場合があります。通常のメッセージの元の順序は、キューに保持されません。RocketMQ for ApsaraMQでは、同じ注文 ID など、同じシャーディングキーを使用する順序メッセージは、同じキューに順番にルーティングされます。

    RocketMQ for ApsaraMQ ブローカーは、プロデューサーがメッセージを送信する順序に基づいて、メッセージが生成される順序を決定します。RocketMQ for ApsaraMQ ブローカーは、異なるプロデューサーまたはスレッドによって並行して送信されたメッセージの順序を決定することはできません。

  • メッセージの保存

    前の図に示すように、順序メッセージのTopic 内の各論理キューは、物理キューに対応しています。メッセージが論理キューに順番に送信されると、対応する物理キューに同じ順序で保存されます。

  • メッセージのコンシューム

    RocketMQ for ApsaraMQは、メッセージを保存されている順序でコンシューマーに配信します。その後、コンシューマーは、最初に受信したメッセージからコンシュームします。

    コンシューマーがメッセージをコンシュームする場合、同じシャーディングキーを含むメッセージは単一のスレッドを使用してコンシュームされます。これは、メッセージのコンシューム順序とメッセージの保存順序との整合性、およびメッセージのコンシューム順序とメッセージの公開順序との整合性を確保するのに役立ちます。

使用上の注意

  • 各グループは Topic タイプに対応しています。グループを使用して、順序メッセージと順序なしメッセージの両方を送受信することはできません。

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

よくある質問

  • 1 つのメッセージが、順序メッセージ、スケジュールメッセージ、トランザクションメッセージになることはできますか?

    いいえ。順序メッセージ、スケジュールメッセージ、トランザクションメッセージは異なるメッセージタイプであり、相互に排他的です。

  • 順序メッセージはどのリージョンで使用できますか?

    RocketMQ for ApsaraMQが利用可能なすべての Alibaba Cloud リージョンおよび Finance Cloud リージョンで、順序メッセージがサポートされています。

  • 順序メッセージはどの伝送モードをサポートしていますか?

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

  • 順序メッセージは、クラスタリングコンシュームとブロードキャストコンシュームをサポートしていますか?

    順序メッセージはクラスタリングコンシュームをサポートしていますが、ブロードキャストコンシュームはサポートしていません。

TCP SDK のサンプルコード

TCP 経由のメッセージングのサンプルコードについては、次のドキュメントを参照してください。

HTTP SDK のサンプルコード