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

ApsaraMQ for RabbitMQ:順序付き消費

最終更新日:Mar 08, 2026

このトピックでは、ApsaraMQ for RabbitMQ における順序付き消費の実装方法について説明します。また、オープンソースの RabbitMQ との比較、機能の設定方法、およびその制限事項についても解説します。

順序付き消費の実装原理

RabbitMQ で順序付き消費を実現するには、順序付きストレージと単一コンシューマーという 2 つの条件を満たす必要があります。

オープンソース RabbitMQ の実装

  • 単一コンシューマー:オープンソースの RabbitMQ は、シングルアクティブコンシューマーと排他的コンシューマーの 2 つのモードをサポートしています。オープンソースコミュニティでは、シングルアクティブコンシューマーモードの使用を推奨しています。

  • 順序付きストレージ:オープンソースの RabbitMQ では、同一キュー内のメッセージは単一ノードに対して読み書きされます。これにより、メッセージが順序通りに保存されることが保証されます。

ApsaraMQ for RabbitMQ での実装

  • 単一コンシューマー:ApsaraMQ for RabbitMQ は、オープンソースコミュニティで推奨されているシングルアクティブコンシューマーモードをサポートしています。

  • 順序付きストレージ:ApsaraMQ for RabbitMQ は、ストレージとコンピューティングを分離した分散アーキテクチャを採用しています。単一キュー内のメッセージは、複数のノード上の複数のパーティションに分散されます。ただし、コンピュートノードはストレージノード上のこれらのパーティションからメッセージを読み取り、マージソートを実行してからコンシューマーに配信します。このプロセスにより、オープンソース版と同じ順序付き消費のセマンティクスが実現されます。

ストレージとコンピューティングを分離した分散アーキテクチャにおける順序付き消費の実装

image

上図に示すように、シングルアクティブコンシューマーモードのキューには、アクティブな接続が 1 つだけ存在します。他のすべての接続は非アクティブです。アクティブな接続を担当するコンピュートノードは、すべてのストレージノードからメッセージをプルし、メッセージをソートしてからコンシューマーに配信します。

メッセージはコンピュートノード上でソートされるため、コンピュートノードは一部のメッセージを一時的にキャッシュに保持します。アクティブな接続が別のコンピュートノードにフェイルオーバーした場合、これらのキャッシュされたメッセージは消費キューに再追加されます。

ApsaraMQ for RabbitMQ のメリット

  • 高い同時実行性とスケーラビリティApsaraMQ for RabbitMQ は、複数のパーティションを使用して高い同時実行性での書き込みをサポートし、優れた水平スケーリング機能を提供します。

  • 高可用性ApsaraMQ for RabbitMQ は、複数のコンシューマーが複数のコンピュートノードに接続できるようにすることで、高可用性を提供します。コンシューマーまたはコンピュートノードに障害が発生した場合、システムは正常なノードに迅速にフェイルオーバーして、サービスの継続性を確保します。

有効化の方法

順序付き消費を有効にするには、キューがシングルアクティブコンシューマーモードを使用するように設定します。キューを作成する際に、x-single-active-consumer パラメーターを true に設定します。

重要

このモードを有効にすると、サーバーはキュー内のメッセージをソートしてからコンシューマーに配信します。このプロセスにより、消費レートが低下する可能性があります。したがって、この機能を有効にするかどうかは慎重に評価する必要があります。

制限事項

この機能は、Enterprise Edition、Platinum Edition、および Serverless Edition のインスタンスでのみ利用可能です。