優先度付きメッセージは、ApsaraMQ for RocketMQ の高度なメッセージタイプです。このトピックでは、優先度付きメッセージのユースケース、仕組み、制限、ベストプラクティスについて説明します。
前提条件
インスタンスバージョン: 5.0-rmq-20260304-1 以降。
クライアント gRPC SDK バージョン:
Java SDK: 5.2.0 以降。
その他の言語 SDK: 今後リリース予定。
ユースケース
分散システムでは、計算能力や API クォータなどのリソースは通常、限られています。重要度が異なる多数のメッセージが同時に到着する場合、システムはコアビジネスのリクエストを識別し、優先して処理する必要があります。優先度付きメッセージを使用すると、プロデューサーは各メッセージに優先度レベルを割り当てることができます。これにより、システムが輻輳している場合でも、高優先度のタスクが先に処理されます。
AI 計算リソースのスケジューリング
AI ワークロードでは、計算リソース (GPU/NPU) が非常に希少で、スケジューリングコストも高くなります。優先度付きメッセージを使用して、変動するリクエストストリームのスケジューリングを平準化できます:
タスク種別に基づく優先付け: コアビジネスタスク (リアルタイムの EC レコメンドなど) は実験モデルよりも優先度を高くします。オンライン推論タスク (ユーザーのリアルタイムリクエスト) はオフライントレーニングタスクよりも優先度を高くします。
リソース規模に合わせた優先度の調整: 小バッチのクイック検証タスクは、高優先度を割り当ててリソースを迅速に解放できます。大規模な事前学習タスクは、緊急性に応じて優先度を下げます。
緊急性に基づく優先付け: 厳格な期限があるタスク (自動運転モデルのリアルタイム更新など) には、最も高い優先度を割り当てる必要があります。
API レート制限
サードパーティのサービスプロバイダーの中には、アカウントレベルで統一のレート制限を適用する場合があります。複数の業務ライン (注文処理、ステータス同期、ログ記録など) のメッセージが同じコンシューマーキューを共有している場合、優先度設定を使用して 注文関連メッセージ を先に処理できます。これにより、支払いまたはアクティベーション時のユーザーの待ち時間を回避し、コアビジネスの処理成功率を向上させます。
マーケティングのプッシュ通知
多数のグループにメッセージをプッシュするソーシャルプラットフォームや店舗管理システムでは、緊急性の要件 に基づいて異なる優先度を割り当てることができます。たとえば、カスタマーサービス担当者と顧客のリアルタイムメッセージには高い優先度を、マーケティングおよび通知メッセージには低い優先度を割り当て、異なる即時性の要件を満たします。
仕組み
優先度付きメッセージでは、プロデューサーが送信時に各メッセージに数値の優先度レベルを割り当てます。メッセージの滞留が発生した場合、ApsaraMQ for RocketMQ は ベストエフォート で、優先度の高い順にメッセージをコンシューマーへ配信します。
ワークフローは次のとおりです:
メッセージを送信する前に、プロデューサーはメッセージプロパティを使用して優先度を設定します。例:
message.setPriority(int level)。メッセージを保存する際、システムは各メッセージを、その優先度レベルに基づいて優先度トピック配下の別々のキューに書き込みます。各キューは 1 つの優先度レベルに対応します。
コンシューマーがブローカーからメッセージを取得する際、最も優先度の高いキューから先にプルします。
メッセージの優先度は、単一のブローカーノード内では厳密に順序付けされます。つまり、そのノードでは高優先度メッセージが常に先に消費されます。ブローカー間のグローバルな順序付けは保証されません。分散デプロイでは、各ブローカーは異なるコンシューマーによって並列に消費されるため、全体としては「高優先度メッセージのベストエフォートな優先付け」という効果になります。
制限事項
優先度の範囲: デフォルトのメッセージ優先度は 0 ~ 9 の整数で、値が大きいほど優先度が高くなります。
トピックレベルの制限: 各トピックには最大優先度 (デフォルトは 9) を設定できます。トピックの優先度の上限を変更するには、サポートチケットを送信するか、管理者にお問い合わせください。
ベストプラクティス
PushConsumer の maxCacheMessageCount の削減
ローカルキャッシュキュー内のメッセージは、優先度でソートされません。PushConsumer のローカルキャッシュ内のメッセージ数を減らすことで、未処理メッセージが可能な限り優先度順に配信されるようになります。
優先度キューにおける同時配信コンシューマーグループの使用
優先度に基づく消費はメッセージの送信順序を崩すため、順序付きメッセージ配信とは両立しません。優先度付きメッセージを消費する場合は、コンシューマーグループの deliveryOrderType を Concurrently に設定してください。