FAQ: Anypoint MQ

このドキュメントでは、Anypoint MQ (MQ) に関するよくある質問をまとめました。

MQ が Anypoint Platform に表示されない理由は?

Anypoint MQ を使用するには個別の Enterprise サブスクリプションが必要です。Anypoint MQ は Anypoint Platform トライアルバージョンに含まれません。詳細は、MuleSoft サポートにお問い合わせください。Enterprise サブスクリプションがない場合は、Apache Active MQ または Rabbit MQ を使用できます。

MQ を使用できるリージョンは?

Anypoint MQ の FIFO 以外および FIFO のキューは次のリージョンで使用できます。

  • 北米:

    • 北バージニア (us-east-1)

    • オレゴン (us-west-2)

    • カナダ中央部 (ca-central-1)

  • ヨーロッパ:

    • アイルランド (eu-west-1)

    • ロンドン (eu-west-2)

  • APAC:

    • シンガポール (ap-southeast-1)

    • シドニー (ap-southeast-2)

メッセージを作成して Mule Runtime から Anypoint MQ に送信する方法は?

Enterprise サブスクリプションを取得し、MuleSoft の担当者に連絡して Anypoint MQ をアクティブ化したら、Anypoint Platform を使用してキューまたはメッセージ交換を作成し、それらにメッセージを送信できます。詳細は、「Anypoint MQ チュートリアル」を参照してください。

Anypoint MQ でメッセージを暗号化する方法は?

Anypoint MQ メッセージは、常に、最新のトランスポート層セキュリティ (TLS) プロトコルを使用するインフライト HTTPS 暗号化を使用して転送されます。 また、保存時の暗号化に対応するように Anypoint MQ キューを設定している場合、ペイロードはサーバ側で暗号化されます。

アプリケーションの暗号化セキュリティの層を強化する必要がある場合、メッセージを Anypoint MQ にパブリッシュする前にペイロードをユーザ自身で暗号化できます。ただし、メッセージのパブリッシャーとコンシューマの両方に対して独自の暗号化キーを管理する必要があります。

暗号化されたキューの UI に、復号化されたメッセージが表示される理由は?

キューを暗号化した場合、メッセージは暗号化されて保存されますが、メッセージは読み取り時に復号化されます。暗号化と復号化は自動的に、エンドユーザには透過的に処理されます。この自動復号化を無効にするオプションはありません。ペイロードの暗号化を維持するようにメッセージを暗号化する必要がある場合は、コンテンツを手動で暗号化します。

Java オブジェクトをメッセージとして送信する方法は?

Anypoint MQ メッセージの本文は JSON メッセージの一部として String (文字列) として送信されるため、パブリッシュする必要があるコンテンツは String (文字列) 形式で逐次化する必要があり、後から非逐次化できます。これを実行する方法の 1 つは、DataWeave を使用して Java オブジェクトをその JSON 表現に逐次化する方法です。後で String (文字列) から逐次化および非逐次化できます。適切な String (文字列) の逐次化がない Java オブジェクトを送信すると、メッセージが受信側で読み取り不可になります。

メッセージやキューをリージョン間で共有できますか?

いいえ、キューとメッセージ交換は、それらが作成されたリージョンに一意のものであり、メッセージやキューをリージョン間で共有することはできません。開発者はリージョン間で負荷を分散するカスタムプログラムを手動で作成できますが、Anypoint MQ 自体はマルチリージョンサポートを提供しません。

各リージョンのキューは、他のリージョンのキューとは切り離されています。各リージョンのキューを同じ名前にできますが、キューはリージョン間でメッセージを共有できません。

MQ ユーザインターフェイスを使用してフェッチできるメッセージの数は?

[Anypoint Platform] > [MQ] > [Message Browser (メッセージブラウザ)] で、FIFO 以外のメッセージを最大 50 個フェッチできます。FIFO メッセージは最大 10 個フェッチできます。 この FIFO 制限は、インフライト FIFO メッセージが 10 個までしか存在できないためです。インフライトメッセージについての詳細は、「キューごとに持つことができるインフライトメッセージの数は?」を参照してください。

Anypoint MQ REST API を使用してメッセージを取得する場合、受信するメッセージの数がバッチサイズよりも少ない理由は?

Anypoint MQ は高度に分散されたメッセージングシステムのため、メッセージを受信するための 1 つの API コールの結果が、キューのすべての内容を完全に表しているとは限りません。 Anypoint MQ はベストエフォートケースで動作します。たとえば、キュー内に 5 個のメッセージがある場合、システムは 1 回の API コールで 0~5 個のメッセージを任意の場所に戻します。この数は、この要求がどの分散サブシステムにアクセスするかによって異なります。 後続の API コールでさらにメッセージが取得されます。メッセージを受信する API 要求を継続して実行した場合、すべてのメッセージが取得されます。 通常、高スループットのケースでは、反復 API コールは極めて高速に実行されます。 たとえば、MQ コネクタは MQ バックエンドを連続的にポーリングして新規メッセージを確認しています。大量の API コールを使用していたとしても、ユーザの視点ではメッセージはほぼ瞬時に処理されます。

FIFO 以外のキューでのメッセージの順序は?

FIFO 以外のキューでは、メッセージの順序は保証されません。メッセージの順序は完全にランダムではありませんが、順序が強制されるわけでもありません。順序が気になる場合は、FIFO キューを使用する必要があります。

メッセージを 10 MB よりも大きくすることはできますか?

Anypoint MQ はメッセージを 10 MB に制限します。これより大きなサイズが必要な場合は、ペイロードを複数のメッセージに分割するか、一時預かりのようなサービスを実装し、このサービスでペイロードをファイルシステムまたは blob ストレージに保存した後、ペイロードへのポインタをメッセージ内に配置することで、後でペイロードをダウンロードできます。 ただし、送信者と受信者の両方に対して blob ストレージへのアクセス制御を管理する必要があります。また、FIFO キューを使用しない限り、メッセージが順不同で受信される可能性があることを考慮する必要があります。

メッセージ交換とキューは完全に一意であり、その作成元の環境でのみそれらにアクセスできますか?

つまり、1 つの環境で作成されたメッセージ交換またはキューと、異なる環境で作成されたメッセージ交換またはキューの名前が同じ場合に、混乱のないようにまたはそれらが接続されないようにする方法がありますか?

複数の環境でキューと交換に同じオブジェクト名を付けることはできますが、クライアント ID やクライアントシークレットは別のものにする必要があります。各キューと交換に、対応するアプリケーションクライアント ID がない場合、開発環境から本番キューにアクセスできません。

キューまたはメッセージ交換へのアクセスを制限する方法は?

[Anypoint Platform] > [Access Management (アクセス管理)] > [Business Groups or Environments (ビジネスグループまたは環境)] を使用できます。ビジネスグループまたは環境で作成されたキューおよびメッセージ交換は、そのビジネスグループまたは環境へのアクセス権を持つユーザにのみ表示されます。

Anypoint MQ をオンプレミスで使用できますか?

オンプレミスシステムから Anypoint MQ にメッセージをパブリッシュし、別のオンプレミスサブスクライバが Anypoint MQ からメッセージを取得できるようにすることができます。現在、Anypoint MQ はオンプレミスにデプロイできません。 オンプレミスのメッセージングソースが必要な場合は、代わりに Apache Active MQ を使用できます。

Anypoint MQ でディザスタリカバリと高可用性フェイルオーバーを処理する方法は?

特定のリージョン内で、MQ サービスは複数の可用性ゾーン (AZ) にデプロイされ、高可用性 (HA) を提供します。1 つの可用性ゾーンのサービスが停止しても、そのリージョンの Anypoint MQ サービスは引き続き正常に動作します。リージョン内のすべての可用性ゾーンが停止した場合、少なくとも 1 つの可用性ゾーンが回復するまで、そのリージョンで Anypoint MQ サービスは使用できません。ただし、MQ のストレージソリューションには耐久性があります。つまり、サービスが中断する前に MQ システムにすでに存在していたメッセージのメッセージ損失はありません。

Anypoint MQ には、リージョン間でメッセージやキューを複製するための組み込みサポートはありません。

Anypoint MQ コネクタで再試行戦略を使用できますか?

Anypoint MQ コネクタでは、接続ベースのプロトコルは厳密には使用されていませんが、背景で REST が使用されています。そのため、このコネクタで再接続戦略は使用できません。

インバウンド側では、最大再試行回数に設定した最大再配信属性と、制限に達したときに DLQ に移動する例外戦略を使用して、再試行戦略を容易に模倣できます。

アウトバウンド側では、同じトリガメカニズムに従います。 それ以外の場合は、このコネクタで until-successful 要素を使用できます。

また、[Global Element Properties (グローバル要素のプロパティ)] > [Set Max Redelivery (最大再配信を設定)] を -1 の値に設定するように HTTP コネクタを設定する必要があります。

DLQ からのメッセージを再生/再処理する方法は?

メッセージを再生するための組み込み機能はありません。このため、このメッセージをコンシュームし、元のキューに転送して再処理するための特別なフローまたはアプリケーションを実装する必要があります。

フェイルオーバーを回復し、処理する方法は?

Anypoint MQ が動作しているネットワークは、複数のデータセンターにまたがる高可用性レプリケーションを提供します。

フェイルオーバーが実行されたときにメッセージが一意に処理されるようにする方法は?

サーバに障害が発生してフェイルオーバーが実行された場合、メッセージは、Anypoint MQ が動作しているネットワーク内の他のサーバで引き続き処理されます。通常の Anypoint MQ キューでは 1 回のみのメッセージ配信は保証されません。1 回のみのメッセージ配信をサポートするのは FIFO キューのみです。高可用性ネットワークでは、FIFO キューのメッセージは自動的に重複排除されます。

Anypoint MQ ではメッセージ配信が保証されますか?

はい、Anypoint MQ では、宛先への「少なくとも 1 回 (at least once)」のメッセージ配信が保証されます。

API 要求の計算方法は?

Anypoint MQ への各 API コールが 1 つの API 要求としてカウントされます。 各コールの要求としてのカウントには、メッセージの送信、受信、および肯定応答のほか、キューおよび交換に対するすべての操作が含まれます。

1 回の API コールから最大 10 個のメッセージを取得できますが、この 1 回の API コールのみが 1 つの要求として請求されます。 キューが空の場合など、メッセージを取得する要求でメッセージが返されない場合でも、1 つの API 要求として請求されます。

MQ の最大 TPS は?

通常のキューまたは交換には、最大トランザクション/秒 (TPS) はありません。FIFO キューには 300 TPS の制限がありますが、API を使用して読み書き操作ごとに 10 個のメッセージ (最大) を一括処理した場合、FIFO キューは最大 3,000 TPSをサポートできます。

キューごとに含めることができるインフライトメッセージの数は?

Anypoint MQ では、FIFO 以外のキューごとに最大 120,000 個のインフライトメッセージがサポートされます。FIFO キューでは特別な処理が必要なため、FIFO キューごとに許可されるインフライトメッセージの数は最大 10 個です。 インフライトメッセージとは、キューにより受信されたが削除されていないメッセージ (つまり ACK または NACK を待機しているメッセージ)、または [Message Lock Default TTL (メッセージロックのデフォルト TTL)] (存続期間) 設定の期限が切れているメッセージです。1 つのキューには、無制限のメッセージ数を含めることができますが、インフライトメッセージの数は限られています。転送中かどうかにかかわらず、メッセージの最大存続期間は 2 週間です。この後、Anypoint MQ はメッセージを削除します。

Anypoint MQ コネクタはメッセージを保存して送信を再試行しますか?

MQ コネクタは再送信の目的でメッセージを保存しません。コネクタにより 5 回再試行された後、メッセージは破棄されるため、メッセージをどのように処理するかをアプリケーションで決定する必要があります。

再試行は Mule フローに対して同期的に実行されますか、非同期で実行されますか?

Anypoint MQ ブローカーへのメッセージ送信の再試行は常に同期的に実行されます。対照的に、クライアントモードではバックエンドへの接続を確立する方法が特定され、メッセージ送信の再試行は管理されません。

再試行は maxRedelivery 設定で管理されますか?

再試行は任意です。maxRedelivery は、メッセージが配信されたが処理されなかった (NACK または TimeOut の) 回数を示すメッセージに付属するパラメータを参照します。

バッチで Anypoint MQ メッセージをコンシュームできますか?

はい、REST API では batchSize クエリパラメータがサポートされます。これにより、1 回のコールで最大 10 個 (デフォルト値) のメッセージを取得できます。取得できる最大数は、1 回のコールで 10 メッセージです。これより低い値は Anypoint MQ コネクタの [Prefetch Config (プリフェッチ設定)] パラメータで設定できます。

コネクタで取得するメッセージの数は、設定された数よりも少なくなる場合があります。10 よりも大きい数は上書きされます。

Mule 以外のアプリケーションは Anypoint MQ と連携できますか?

Mule 以外のアプリケーションがある場合、Anypoint MQ REST API を使用してメッセージの送受信ができます。

Anypoint MQ のスループット容量は?

Anypoint MQ は水平方向に拡張可能で、必要に応じてより高いスループットをサポートします。

メッセージがキューに到着したときに通知を受け取ることはできますか?

Anypoint MQ はロングポーリングを提供します。十分なメッセージがない場合、REST 要求を実行し、TCP ソケットを最大 20 秒間開いたままにして要求を満たすようにサーバに指示できます。

メッセージを 1 つずつ処理する方法は?

メッセージを 1 つずつ処理するには、Anypoint MQ コネクタを consume 操作に設定します。 この操作では、キューからメッセージを取得するか、使用可能なメッセージがない場合は null を受信します。

その後の操作は、Mule バージョンに応じて異なります。

Mule 4

maxConcurrency="1" 属性を flow 要素に追加します。

コンポーネントが任意の時点で受信できる同時呼び出し数を 1 に設定するようにこの属性を指定します。

Mule 4 の例:

<flow name="testanypointmq1by1Flow4" maxConcurrency="1">
    <logger level="INFO" doc:name="Logger" message="Flow triggered" />
    <anypoint-mq:consume doc:name="Anypoint MQ"
       config-ref="Anypoint_MQ_Config"
       destination="queuename" />
       <logger level="INFO" doc:name="Logger" message="Processing message received. #[payload]"/>
    <anypoint-mq:ack
        ackToken="#[vars.currentAckToken]"
        config-ref="Anypoint_MQ_Config"
        doc:name="Anypoint MQ"/>
    <logger doc:name="Logger" level="INFO" message="Message processed."/>
</flow>

Mule 3

  • フローで processingStrategy="synchronous" を設定します。

    メッセージを最初に受信した同じスレッドでメッセージを処理するようにこの属性を指定します。

  • プロセスを定期的に起動するようにポーリングスコープを設定します。

Mule 3 の例:

<flow name="testanypointmq1by1Flow3" processingstrategy="synchronous">
    <poll doc:name="Poll">
        <logger doc:name="Logger" level="INFO" message="Polling fired"></logger>
    </poll>
    <anypoint-mq:consume config-ref="Anypoint_MQ_Configuration" destination="queuename" doc:name="Anypoint MQ"/>
    <logger doc:name="Logger" level="INFO" message="Processing message received. #[payload]"/>
    <anypoint-mq:ack config-ref="Anypoint_MQ_Configuration" doc:name="Anypoint MQ"/>
    <logger doc:name="Logger" level="INFO" message="Message processed."/>
</flow>
anypoint-mq:consumeanypoint-mq:ack 間の処理時間がキューの [Message Lock Default TTL (メッセージロックのデフォルト TTL)] 設定の値より高い場合、複数のインフライトメッセージが発生する可能性があります。

メッセージの参照オプションで Anypoint MQ ヘッダーを参照できますか?

Anypoint MQ では、メッセージ ID とペイロードへの直接アクセスが提供されます。Chrome ブラウザとそのネットワークインスペクタ機能を使用してメッセージヘッダーを参照できます。

Mule 共有リソースに Anypoint MQ コネクタのサポートは追加されますか?

共有リソースを公式にサポートしているコネクタとトランスポートは HTTP/HTTPS、VM、JMS、JMS キャッシング接続ファクトリ、データベース、WMQ、JBoss トランザクションマネージャ、Bitronix トランザクションマネージャのみです。

多数のキューとメッセージ交換を作成する方法は?

for ループ内で curl コマンドを REST 管理 API と共に使用して、必要な数のキューとメッセージ交換を作成できます。curl コマンドの例を参照してください。これを変更してキューまたはメッセージ交換を作成できます。

メッセージ/月の使用料金はすべての環境に関係しますか?

はい、すべての環境に関係します。

プリフェッチを使用してメッセージを取得した場合に 400 エラー (不正な要求) が表示されない理由は?

プリフェッチで Anypoint MQ をメッセージプロセッサとして使用する場合、グローバルプリフェッチ設定のみを使用してください。

たとえば、次のローカルプリフェッチは機能しません。

<anypoint-mq:subscriber config-ref="Anypoint_MQ_Configuration"
    destination="programmatically" doc:name="Anypoint MQ" >
    <anypoint-mq:prefetch fetchSize="50" fetchTimeout="10000"/>
</anypoint-mq:subscriber>

代わりに次のグローバルプリフェッチを使用します。

<anypoint-mq:prefetch name="Prefetch_Settings" fetchSize="50"
     fetchTimeout="10000" doc:name="Prefetch Settings"/>
<anypoint-mq:subscriber config-ref="Anypoint_MQ_Configuration"
     destination="programmatically" doc:name="Anypoint MQ"
     prefetch-ref="Prefetch_Settings"/>

キューを削除する方法は?

キューを削除する手順は、次のとおりです。

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

  2. [Destinations (宛先)] テーブルでキューエントリの*右*側をクリックします。

    mq click type q2
  3. 右上のゴミ箱マークをクリックします。

  4. [Delete Queue (キューを削除)] メニューで、チェックボックスをクリックします。

    mq delete queue
  5. [Delete Queue (キューを削除)] をクリックします。

キューの削除またはパージにかかる時間は約 1 分です。この間、影響を受けるキューの状況は更新されない場合があります。

メッセージ交換を削除する方法は?

メッセージ交換を削除する手順は、次のとおりです。

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

  2. [Destinations (宛先)] テーブルでメッセージ交換エントリの​​右​​側をクリックします。

    mq click type x2
  3. 右上のゴミ箱マークをクリックします。

  4. [Delete Exchange (交換を削除)] メニューで、チェックボックスをクリックします。

    mq delete exchange
  5. [Delete Exchange (交換を削除)] をクリックします。

Was this article helpful?

💙 Thanks for your feedback!