キューの設定

Anypoint MQ は、Mule メッセージをキューにパブリッシュして他のアプリケーションがメッセージをコンシュームできるようにすることでアプリケーション間の通信を可能にするメッセージングブローカーです。

このガイドでは、Anypoint Platform を使用してキューを作成する方法について説明します。

  • キュー名には英数字 (a-z, A-Z、0-9)、ドット (.)、ダッシュ (-) を含めることができます。その他のすべての文字は使用できません。

  • キュー名の長さは 127 文字に制限されます。

  • メッセージの最大サイズは 10 MB です。

  • メッセージの最大存続期間 (TTL) は 2 週間です。最大ロック TTL は 12 時間です。

  • Anypoint MQ では、FIFO 以外のキューごとに最大 120,000 個のインフライトメッセージがサポートされます。FIFO キューでは、キューごとに 10 個のインフライトメッセージに制限されます。

組織の管理者または所有者は現在および過去の月の使用量 (メッセージと API 要求の合計数) を参照できます。この情報には、[Access Management (アクセス管理)] ページからアクセスします。詳細は、「Anypoint MQ の使用量情報」を参照してください。

Anypoint MQ にアクセスするための環境、ユーザアクセス権、ロールが組織で作成されていない場合は、このガイドを開始する前に 「Anypoint MQ のアクセス管理」を参照してください。

キューの作成

キューはメッセージの一時ストレージ領域です。Anypoint Platform の MQ 機能を使用してキューを作成し、キューとの間でメッセージの送受信ができます。Anypoint Studio を使用して、キューとの間でメッセージを送受信することもできます。

キューを作成する場合、必要に応じてキュー内のすべてのメッセージを暗号化するように選択することができます。有効にした場合、Anypoint MQ は、MD5 とトリプル DES を使用する PBE と、168 ビットキーを使用してメッセージを暗号化します。

Anypoint MQ を使用すると、メッセージが順番に到着する先入れ先出し (FIFO) キュー、またはメッセージの順序が保証されない標準キューを作成できます。 メッセージの厳密な順序と、正確に 1 回 (exactly once) の配信を必要とし、メッセージの配信速度があまり重要でないアプリケーションでは FIFO キューが最適です。 メッセージをすばやく配信する必要があるアプリケーションでは、標準キューが最適です。

「FIFO キュー」も参照してください。

キューまたは FIFO キューを作成する手順は、次のとおりです。

  1. Anypoint Platform にログインします。

  2. 左のナビゲーションバーまたは Anypoint Platform のメイン画面から [MQ] をクリックします。

  3. [Destinations (宛先)] をクリックします。

  4. 青い丸のプラスアイコンをクリックします。

    mq blue create
  5. [Queue (キュー)][Exchange (交換)]、または [FIFO Queue (FIFO キュー)] をクリックします。[Exchange (交換)] の場合は、「メッセージ交換の設定」を参照してください。

  6. [Create Queue (キューを作成)] または [Create FiFO Queue (FIFO キューを作成)] の項目を入力します。

    mq create queues
    • ID - キュー名を指定します。a-z、A-Z、0-9、ピリオド (.)、ハイフン (-) の文字のみを含めることができます。キュー名にスペースやその他の文字を含めることはできません。また、最大長は 127 文字です。メッセージの最大サイズは 10 MB です。

    • Message TTL (メッセージ TTL) - (存続期間) - 未処理のメッセージが削除される前に保持される時間。最大 TTL は 2 週間です。

    • Message Lock Default TTL (メッセージロックのデフォルト TTL) - サーバ障害が発生してメッセージが肯定応答されない場合にメッセージをキューに戻すまで待機する期間を指定します。メッセージをロックしても、他のメッセージの読み取りがブロックされることはありません。メッセージをロックすると、ロックされている間、他のアプリケーションはメッセージを使用できなくなります。最大ロック TTL は 12 時間です。

    • Encryption (暗号化) (省略可能) - キューを暗号化済みに設定します。Anypoint MQ は、MD5 とトリプル DES を使用する PBE を使用して、メッセージを暗号化します。

    • Assign a Dead Letter Queue (デッドレターキューの割り当て) (省略可能) - デッドレターキュー (DLQ) 名を設定します。DLQ は、配信不能メッセージの送信先としてすでに作成されているキューです。詳細は、​デッドレターキュー​を参照してください。

      新しい MQ アカウントで最初のキューを作成している場合、システム内の唯一のキューにデッドレターキューを割り当てることはサポートされていません。1 つのキューをデッドレターキューとして割り当てるには、少なくとも 2 つのキューが必要です。

  7. [Save Changes (変更を保存)] をクリックします。

  8. [Destinations (宛先)] 画面でキューエントリの右側をクリックすると、その詳細が表示されます。

    キューの詳細を次に示します。

    mq queue details

Anypoint Platform を使用してキューにメッセージを送信し、表示する方法、メッセージをキューに戻す方法、メッセージを削除する方法については​「​キューへのメッセージの送信​」を参照してください。 (ペイロードと呼ばれる) メッセージのコンテンツには、テキスト、JSON、または CSV (カンマ区切り値) を使用できます。

キューを削除する必要がある場合は、「キューを削除する方法は?」を参照してください。

FIFO キュー

メッセージの順序を厳密に保持および適用する必要があるアプリケーションの場合、Anypoint MQ は先入れ先出し (FIFO) 処理を提供し、メッセージの順序付けができるようにします。FIFO を使用した場合、Anypoint MQ は、キューに入れられたメッセージの順序と同じ順序でメッセージを取得できるようにします。

トピック:

FIFO に関する注意事項

同じメッセージ ID が含まれる FIFO キューに複数のメッセージを送信した場合、最初に到着したメッセージが有効なメッセージとして保持されます。以降のメッセージが 5 分の重複排除間隔内に到着した場合は重複とみなされ、破棄されます。たとえば、キューに ID が 12345 のメッセージが到着したら、それから 5 分間、FIFO キューは ID が 12345 のメッセージをすべて破棄します。
  • FIFO キューはメッセージ交換にバインドできません。

  • FIFO キューを暗号化しても、コンシュームされるメッセージの順序やコンテンツには影響しません。

  • FIFO キューには 300 TPS の制限がありますが、API を使用して読み書き操作ごとに 10 個のメッセージ (最大) を一括処理した場合、FIFO キューは最大 3,000 TPSをサポートできます。

  • FIFO では、キューごとに最大 10 個のインフライトメッセージが許可されます。

  • MQ と FIFO を使用可能なリージョンについては、「MQ FAQ」 を参照してください。

  • FIFO キューでは、FIFO デッドレターキューのみを DLQ として使用できます。

FIFO 関連のドキュメント

Anypoint MQ ドキュメントセットに含まれる他の FIFO 関連情報を次に示します。

FIFO の正確に 1 回 (Exactly Once) の配信

メッセージを正確に 1 回処理する必要があるトランザクション型のユースケースで使用するアプリケーションの場合、Anypoint MQ では、メッセージが FIFO キューにパブリッシュされたときにメッセージを正確に 1 回だけ配信できます。FIFO キューでは、メッセージの重複排除がサポートされます。たとえば、5 分の重複排除間隔内で FIFO キューに対して、同じメッセージ ID を持つメッセージの送信を再試行した場合、Anypoint MQ は、同じメッセージ ID を持つメッセージをサブスクライバが正確に 1 回だけ取得して処理することを保証します。Anypoint Studio でこの機能を必要とするアプリケーションを構築する場合、Anypoint MQ コネクタ内のパブリッシャー設定でメッセージ ID を設定できます。メッセージ ID を明示的に設定しない場合、MQ は、キューに送信されるメッセージごとに一意のメッセージ ID を自動生成します。

デッドレターキュー

Anypoint MQ はデッドレターキュー (DLQ) をサポートしているため、正常に配信できないメッセージが、デッドレターキューと呼ばれるキューにバックアップ目的で送信されます。デッドレターキューを使用すると、正常に処理されなかったメッセージを別の場所に分離できます。その後、ユーザは DLQ に送信されたメッセージを分析し、そのメッセージが正常に処理されなかった理由を特定できます。DLQ は実際には他のキューと同じです。これは、単に未配信のメッセージを受信するキューです。また、1 つのキューをそれだけで DLQ にすることはできません。1 つのキューを DLQ にするには、少なくとも 2 つのキューが必要です。

デッドレターキューに関する重要な注意事項:

  • デッドレターキュー (DLQ) は FIFO 以外または FIFO のどちらかである必要があります。FIFO デッドレターキューへのメッセージは FIFO キューから送信される必要があります。FIFO 以外の DLQ へのメッセージは FIFO 以外のキューから送信される必要があります。 「FIFO キュー」も参照してください。

  • DLQ は他のキューと同じリージョンにあります。

  • DLQ に送信されたメッセージが、別のキューから送信された実際の配信不能なメッセージの場合、そのメッセージは、請求可能なメッセージ単位に課金されません。 ただし、DLQ は他のキューと同じであり、クライアントは DLQ にメッセージを直接送信できます。 クライアントが DLQ にメッセージを直接送信した場合、そのメッセージは課金されます。

  • 存続時間 (TTL) の値、またはキューが暗号化されるかどうかは、DLQ として使用するキューの作成方法によって異なります。

  • DLQ および DLQ に書き込むキューは、同じ地理的リージョンおよび環境内に存在し、同じ Anypoint Platform アカウントによって所有される必要があります。

  • DLQ に経路変更された配信不能メッセージは、(DLQ の暗号化設定に関係なく) ソースキューの暗号化を使用しますが、クライアントにより DLQ に直接送信されたメッセージは DLQ の暗号化設定を使用します。組織は、暗号化に関する運用上の要件が満たされていることを確認する必要があります。組織のポリシーとしてすべてのメッセージを暗号化する場合、配信不能メッセージを DLQ に移動するときは、すべてのキューを暗号化する必要があります。

  • キューでデッドレターキューが有効になっている場合、ソースキューのメッセージを Anypoint MQ *メッセージブラウザ*で表示すると、最大配信数にカウントされます。メッセージを表示してキューに戻すことは nack とみなされ、失敗した配信の試みになります。メッセージをキューに戻すのではなくブラウザで削除すると、そのメッセージは最大配信数にカウントされませんが、当然のことながらメッセージは消えます。

キューへの DLQ の割り当て

キューを作成するときに [Assign a Dead Letter Queue (デッドレターキューの割り当て)] をオンにすると、次の追加の項目が表示されます。

mq create q dlq
  • Dead Letter Queue Name (デッドレターキュー名) - 以前に作成したキューの名前をドロップダウンリストから選択します。

  • Reroute after 10 attempts (10 回の試行の後に経路変更) (省略可能) - メッセージをデッドレターキューに経路変更するまで Anypoint MQ でキュー内のメッセージの配信を何回試行するかを指定します。指定しない場合、デフォルト値の 10 回になります。この範囲は 1 ~ 1000 です。

次のフローチャートは、メッセージが DLQ にどのように送信されるかのロジックを示しています。

mq dlq flowchart

DLQ からのメッセージの回復

DLQ からメッセージを回復する必要がある場合、REST API を使用してキューからメッセージを取得し、そのメッセージを新しいキューに書き込みます。詳細は、「MQ 管理 REST API」 を参照してください。

どのキューが DLQ かを確認

各キューの詳細を表示して、キューにデッドレター*ソース*があるかどうか (つまり、他のキューがこのキューを DLQ として使用しているかどうか) を確認できます。

各キューの詳細は、Get Queue REST エンドポイントを使用して REST 管理 API により参照することもできます。DLQ が設定されている場合、返されるエンティティに deadLetterSources 項目が含まれます。詳細は、「Anypoint MQ 管理 REST API」 を参照してください。

たとえば、次のように表示されます。

{
 "encrypted": false,
 "type": "queue",
 "queueId": "my-dlq-1",
 "deadLetterSources": [
   "my-queue-4",
   "my-dls-1"
 ],
 "defaultTtl": 2000000,
 "defaultLockTtl": 2000000
}

キューへのメッセージの送信

最大メッセージサイズは 10 MB です。

キューにメッセージを送信する手順は、次のとおりです。

  1. Anypoint Platform にログインします。

  2. 上部のタスクバーで [MQ] をクリックします。

  3. [Destinations (宛先)] をクリックします。

  4. [Destinations (宛先)] でキューエントリをクリックすると、キューに関する詳細が表示されます。

  5. 詳細内のキュー名をクリックすると、メッセージング機能が開きます。

    mq access messaging2
  6. 設定ページで、[Message Sender (メッセージ送信者)] をクリックします。

    mq click msg sender2
  7. [Payload (ペイロード)] に「Hello Mules」などのテキストを入力します ([Type (種別)] 項目は [Text (テキスト)] の設定のままにします)。

    mq msg sender text payload2
  8. [Send (送信)] をクリックします。

キューのメッセージの確認

メッセージがキューに到着したことを確認するには、[Destinations (宛先)] 画面に戻ってキュー内のメッセージ数を確認するか、メッセージがキュー内にあると想定して[キューからメッセージを取得]することができます。

[Destinations (宛先)] 画面に戻ってメッセージがキューに入っていることを確認する手順は、次のとおりです。

  1. [Destinations (宛先)] をクリックします。

    mq click destinations2
  2. キューをクリックすると、キューの詳細が表示されます。詳細では、メッセージがキューに表示されます。

    mq msgs in queue2

キューからのメッセージの取得

キューからメッセージを取得する手順は、次のとおりです。

  1. キューへのメッセージの送信​の指示に従って、ステップ 6 まで進みます。ただし、[Message Browser (メッセージブラウザ)] をクリックします。

    mq click msg browser2
  2. [Get Messages (メッセージを取得)] をクリックします。

    mq get messages2

    FIFO キューからメッセージを取得する場合、注意事項を確認するチェックボックスをクリックします。注意事項には、ここでブラウザでメッセージを表示し、さらにアプリケーションでもプログラムでこの同じキューからメッセージをコンシュームしている場合は、FIFO キューから受け取るメッセージの順序がばらばらになる可能性があることが示されています。

    mqfifo message browser
  3. メッセージ ID の値をクリックすると、メッセージが表示されます。

    mq click id2
  4. メッセージをキューに戻す場合、たとえば他のアプリケーションでもそのメッセージを読み取る必要がある可能性がある場合、[Return Messages (メッセージを戻す)] アイコンをクリックします (これがデフォルトの状態です)。画面を [Message Sender (メッセージ送信者)] または [Destinations (宛先)] に切り替えると、メッセージはキューに自動的に戻ります。 Anypoint MQ では、メッセージをキューに戻すことは nack と呼ばれます。メッセージは変更されません。ただし、キューの作成時に設定した存続期間 (TTL) の値によって、Anypoint MQ でメッセージが削除されるまでメッセージを使用できる期間が決まります。

    mq click retmsgs2

    また、ゴミ箱アイコンをクリックして、メッセージを削除することもできます。Anypoint MQ では、メッセージを削除することは ack と呼ばれます。Anypoint MQ で ack メッセージを自動的に処理する方法の詳細は、「肯定応答モード」を参照してください。

    mq message delete trash can icon2

これで、Anypoint MQ でメッセージを送受信できるようになりました。

Anypoint MQでは、メッセージはロングポーリングを通じて読み取られます。ロングポーリングでは、サーバは新しいデータが利用可能になるまで要求を開いたままにします。Anypoint MQ では、メッセージを一括読み取りできます。

組織の管理者または所有者は現在および過去の月の使用量 (メッセージと API 要求の合計数) を参照できます。この情報には、[Access Management (アクセス管理)] ページからアクセスします。詳細は、「Anypoint MQ の使用量情報」を参照してください。

次のセクションでは、メッセージを書式設定する別の方法を試すことができます。

CSV または JSON メッセージの送信

JSON メッセージを送信する手順は、次のとおりです。

  1. [Message Sender (メッセージ送信者)] をクリックします。

  2. [Type (種別)][JSON] に設定します。

  3. [Payload (ペイロード)] を次のように設定します。

    {
    "animal that walks":"dog",
    "animal that swims":"fish",
    "animal that flies":"parrot"
    }
  4. [Message Browser (メッセージブラウザ)]、メッセージ ID の順にクリックすると、メッセージが表示されます。

    mq json get msg2

CSV メッセージを送信する手順は、次のとおりです。

  1. [Message Sender (メッセージ送信者)] をクリックします。

  2. [Type (種別)][CSV] に設定します。

  3. [Payload (ペイロード)] を次のように設定します。

    "dog",
    "fish",
    "parrot"
  4. [Message Browser (メッセージブラウザ)]、メッセージ ID の順にクリックすると、メッセージが表示されます。

キューからのメッセージのパージ

キューの詳細を展開した後、[Purge Messages (メッセージをパージ)] アイコンをクリックしてキュー内のすべてのメッセージをパージできます。

mqfifo purge msgs icon

アラートメッセージが表示されます。キュー内のすべてのメッセージをパージすることを確認するチェックボックスをクリックします。

mqfifo purge messages

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub