このトピックでは、ApsaraMQ for RocketMQ のメッセージの定義、モデル関係、内部属性、動作制約、および使用上の注意について説明します。
定義
メッセージは、ApsaraMQ for RocketMQ におけるデータ伝送の最小単位です。プロデューサーは、ビジネスデータのペイロードと拡張属性をメッセージにカプセル化し、そのメッセージを ApsaraMQ for RocketMQ ブローカーに送信します。その後、ブローカーは関連するセマンティクスに基づいてメッセージをコンシューマーに配信します。
ApsaraMQ for RocketMQ のメッセージモデルには、次の特徴があります。
不変性
メッセージは生成されたイベントです。メッセージが生成された後、メッセージの内容は変更されません。メッセージが伝送チャネルを通過しても、メッセージの内容は同じままです。コンシューマーが取得するメッセージは読み取り専用メッセージです。
永続性
デフォルトでは、ApsaraMQ for RocketMQ は、ApsaraMQ for RocketMQ ブローカー上のファイルにメッセージを保存することで、メッセージを永続化します。これにより、システム障害が発生した場合でもメッセージを追跡および回復できます。
モデル関係
次の図は、ApsaraMQ for RocketMQ のドメインモデルにおけるメッセージの位置を示しています。
メッセージはプロデューサーによって初期化され、ApsaraMQ for RocketMQ ブローカーに送信されます。
メッセージは、ApsaraMQ for RocketMQ ブローカーが受信した順序でキューに保存されます。
コンシューマーは、サブスクリプション関係に従って ApsaraMQ for RocketMQ ブローカーからメッセージを取得して消費します。
内部属性
システム属性
メッセージのカスタム属性
メッセージロード
動作の制約
メッセージのサイズは上限を超えることはできません。メッセージのサイズが対応する上限を超えると、メッセージの送信に失敗します。
デフォルトの最大メッセージサイズは次のとおりです。
通常メッセージと順序付きメッセージ: 4 MB
トランザクションメッセージ、スケジュールメッセージ、および遅延メッセージ: 64 KB
使用上の注意
単一メッセージでの過負荷伝送は推奨されません。
メッセージングミドルウェアとして、ApsaraMQ for RocketMQ はビジネスイベントデータを送信するように設計されています。単一メッセージのデータサイズを制御することをお勧めします。メッセージが大きすぎると、ネットワークトランスポートレイヤーの負荷が増加し、リトライやトラフィックシェーピングなどの機能には理想的ではありません。
本番環境で過負荷伝送が必要な場合は、固定サイズに基づいてメッセージを分割するか、ファイルストレージ方式を使用することをお勧めします。
メッセージの不変性
ApsaraMQ for RocketMQ 5.x ブローカーでは、メッセージは不変です。コンシューマーは読み取り専用のメッセージビューを取得します。
3.x および 4.x バージョンには不変性の制約がないため、メッセージを転送する場合は、メッセージを再初期化する必要があります。
正しい例:
Message m = Consumer.receive(); Message m2= MessageBuilder.buildFrom(m); Producer.send(m2);誤った例:
Message m = Consumer.receive(); m.update(); Producer.send(m);