メインコンテンツにスキップ
バージョン: 5.0

メッセージ

このセクションでは、Apache RocketMQにおけるメッセージの定義、モデルの関係、内部属性、および動作制約について説明します。このトピックでは、メッセージの使い方の注意点も説明します。

定義

メッセージは、Apache RocketMQにおけるデータ送信の最小単位です。プロデューサーは、ビジネスデータのペイロードと拡張属性をメッセージにカプセル化し、Apache RocketMQブローカーに送信します。次に、ブローカーは関連するセマンティクスに基づいて、メッセージをコンシューマーに配信します。

Apache RocketMQのメッセージモデルの特徴は以下のとおりです。

  • 不変性: メッセージは生成されたイベントです。メッセージが生成された後、メッセージの内容は変更されません。メッセージが伝送チャネルを通過しても、メッセージの内容は同じままです。コンシューマーが取得するメッセージは読み取り専用メッセージです。
  • 永続性: デフォルトでは、Apache RocketMQはメッセージを永続化します。受信したメッセージは、システム障害が発生した場合にメッセージを追跡および復元できるように、Apache RocketMQブローカーのストレージファイルに保存されます。

モデルの関係

次の図は、Apache RocketMQのドメインモデルにおけるメッセージの位置を示しています。メッセージ

  1. メッセージはプロデューサーによって初期化され、Apache RocketMQブローカーに送信されます。

  2. メッセージは、Apache RocketMQブローカーで受信した順にキューに保存されます。

  3. コンシューマーは、指定されたサブスクリプションに基づいて、Apache RocketMQブローカーからメッセージを取得および消費します。

内部属性

システム保持属性

トピック名

  • 定義: メッセージが属するトピックの名前。トピック名はクラスター内でグローバルに一意です。詳細については、トピックを参照してください。

  • 値: クライアントのSDKから取得。

メッセージタイプ

  • 定義: メッセージのタイプ。

  • 値: クライアントのSDKから取得。Apache RocketMQは、次のメッセージタイプをサポートしています。

    • Normal: 通常のメッセージ。通常のメッセージは、特別なセマンティクスを必要とせず、他の通常のメッセージとは相関関係がありません。

    • FIFO: FIFOメッセージ。Apache RocketMQは、メッセージグループを使用して、指定されたメッセージセットの順序を決定します。メッセージは送信された順に配信されます。

    • Delay: 遅延メッセージ。遅延を指定することで、メッセージが生成されたときにすぐに配信するのではなく、遅延が経過した後にのみコンシューマーがメッセージを利用できるようにすることができます。

    • Transaction: トランザクションメッセージ。Apache RocketMQは分散トランザクションメッセージをサポートしており、データベースの更新とメッセージ呼び出しのトランザクション整合性を保証します。

メッセージキュー

  • 定義: メッセージが属するキュー。詳細については、メッセージキューを参照してください。

  • 値: ブローカーによって指定および設定されます。

メッセージオフセット

  • 定義: 現在のメッセージがキューに保存されている場所。詳細については、動作メカニズムを参照してください。

  • 値: ブローカーによって指定および設定されます。有効な値: 0〜Long.Max。

メッセージID

  • 定義: メッセージの一意の識別子。各メッセージのIDはクラスター内でグローバルに一意です。

  • 値: プロデューサークライアントによって自動的に生成されます。メッセージIDは、数字と大文字で構成される32文字の文字列です。

(オプション) メッセージキー

  • 定義: メッセージのインデックスキーのリスト。さまざまなキーを設定して、メッセージを区別し、メッセージをすばやく見つけることができます。

  • 値: プロデューサークライアントによって定義されます。

(オプション) メッセージタグ

  • 定義: メッセージをフィルタリングするために使用されるタグ。コンシューマーはタグでメッセージをフィルタリングし、指定されたタグを含むメッセージのみを受信できます。

  • 値: プロデューサークライアントによって定義されます。

  • 制約: 各メッセージに対して指定できるタグは1つだけです。

(オプション) スケジュールされた時間

  • 定義: スケジュールされた時間シナリオでメッセージが遅延配信をトリガーするときに使用されるミリ秒レベルのタイムスタンプ。詳細については、遅延メッセージを参照してください。

  • 値: メッセージプロデューサーによって定義されます。

  • 制約: 最大期間は40日間です。

メッセージ送信時間

  • 定義: メッセージが送信されたときのプロデューサークライアントのローカルミリ秒レベルのタイムスタンプ。

  • 値: プロデューサークライアントによって設定されます。

  • 注: クライアントの時間がブローカーの時間と異なる場合があります。この場合、メッセージ送信時間はクライアントの時間に基づきます。

メッセージ格納タイムスタンプ

  • 定義: メッセージが格納されたときのApache RocketMQブローカーのローカルミリ秒レベルのタイムスタンプ。

    遅延メッセージとトランザクションメッセージの場合、メッセージ保持時間は、メッセージが有効になったときにコンシューマーに表示されるブローカー時間です。

  • 値: ブローカーによって設定されます。

  • 注: クライアントの時間がブローカーの時間と異なる場合があります。この場合、メッセージ保持時間はブローカーの時間に基づきます。

再試行回数

  • 定義: メッセージの消費に失敗した後、Apache RocketMQブローカーがメッセージを再配信する回数。再試行するたびに、最大再試行回数が1つずつ増えます。詳細については、消費の再試行を参照してください。

  • 値: ブローカーによってラベル付けされます。メッセージが最初に消費されるとき、再試行回数はゼロです。メッセージが最初に消費に失敗したとき、再試行回数は1です。

メッセージのカスタム属性

カスタム属性

  • 定義: プロデューサーによって指定できる拡張情報。

  • 値: 文字列のキーと値のペアに基づいてプロデューサーによって指定されます。

メッセージペイロード

  • 定義: サービスメッセージの実際のメッセージデータ。

  • 値: プロデューサーによってシリアライズされ、バイナリバイトで送信されます。

  • 制約: パラメーター制限を参照してください。

動作制約

メッセージのサイズは上限を超えることはできません。メッセージのサイズが対応する上限を超えると、メッセージの送信に失敗します。

以下に、メッセージのデフォルトの制限について説明します。

  • メッセージの最大サイズ: 4 MB

使用上の注意

単一のメッセージに対して過負荷の送信は推奨されません。

Apache RocketMQは、ビジネスイベントのデータを送信するメッセージングミドルウェアです。メッセージのサイズが大きい場合、ネットワーク伝送レイヤーが過負荷になる可能性があります。これは、エラー時の再試行とスロットリングに影響します。単一のメッセージイベントのデータサイズを制限することをお勧めします。

本番環境で過負荷の送信が必要な場合は、固定サイズに基づいてメッセージを分割するか、ファイルストレージメソッドを使用することをお勧めします。

メッセージの不変性

Apache 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);