FAQ: Anypoint MQ

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

関連情報:​ ​Anypoint MQ Connector​、​REST API​、​リリースノート​。

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

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

Enterprise サブスクリプションを追加したら、Anypoint MQ が使用可能になるまで 1 時間待ってください。

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

Anypoint MQ の標準キューと FIFO キューは次のリージョンで使用できます。

場所 Region Name (リージョン名) リージョン

US コントロールプレーン

北米

米国東部 (北バージニア)

us-east-1

米国東部 (オハイオ)

us-east-2

米国西部 (オレゴン)

us-west-2

カナダ (中央部)

ca-central-1

ヨーロッパ

欧州 (アイルランド)

eu-west-1

欧州 (ロンドン)

eu-west-2

APAC

アジア太平洋 (シンガポール)

ap-southeast-1

アジア太平洋 (シドニー)

ap-southeast-2

アジア太平洋 (東京)

ap-northeast-1

EU コントロールプレーン

ヨーロッパ

欧州 (フランクフルト)

eu-central-1

欧州 (アイルランド)

eu-west-1

MuleSoft Government Cloud

GovCloud (米国西部)

us-gov-west-1

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

Enterprise サブスクリプションを取得し、アカウントチームに連絡して Anypoint MQ をアクティブ化したら、Anypoint Platform を使用してキューまたはメッセージエクスチェンジを作成し、それらにメッセージを送信できます。詳細は、​「キューの設定」​および​「メッセージエクスチェンジの設定」​を参照してください。

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

Anypoint MQ は、Transport Layer Security (TLS) 1.2 プロトコルでインフライト HTTPS 暗号化を使用してメッセージを転送し、非推奨の TLS バージョン 1.0 および 1.1 をサポートしません。

保管時の暗号化用に Anypoint MQ キューを設定する場合、ペイロードはサーバー側で AES-256 GCM アルゴリズムを使用して暗号化されます。

Anypoint MQ では、メッセージ本文のみが暗号化されます。 Anypoint MQ では、エクスチェンジとキューに送信されたメッセージの ​headers​ や ​properties​ は暗号化されません。

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

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

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

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

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

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

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

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

Anypoint MQ ではパブリッシャーとサブスクライバー間で相関 ID はどのように渡されますか?

Anypoint MQ では、API を使用してレイヤー間で ID を伝播する方法と同じ方法でパブリッシャーからサブスクライバーに ​correlationId​ を伝播することはできません。

パブリッシャーとサブスクライバー間で ID を渡すには、メッセージと共に送信するユーザープロパティを追加します。 詳細は、​「キューへのメッセージの送信」​を参照してください。

相関 ID についての詳細は、 「Total traceability with correlation IDs (相関 ID による完全なトレーサビリティ)」​を参照してください。

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

[Anypoint Platform]​ > ​[MQ]​ > ​[Message Browser (メッセージブラウザー)]​ で、標準 (FIFO 以外の) キューからメッセージを最大 50 個フェッチできます。

FIFO キューでは、取得できるメッセージ数がメッセージブラウザー UI によって 10 件に制限されます。 この FIFO 制限が存在する理由は、FIFO キューのメッセージグループあたりのインフライトメッセージが 10 個に制限されているためです。インフライトメッセージについての詳細は、「​キューごとに持つことができるインフライトメッセージの数は?​」を参照してください。

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

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

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

標準キューは、メッセージの順序を保持しようとしますが、厳密な順序が保証されるわけではありません。 標準キューは拡張性と分散性を考慮して設計されているため、メッセージを送信された順序で受信できる保証はありません。 メッセージの順序が重要である場合、​FIFO キュー​を使用するか、Anypoint MQ Connector を ​Consume 操作​に設定します。

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

Anypoint MQ では、最大 10 MB のペイロードがサポートされています。

ペイロードにテキスト以外の形式 (CSV、HTML、JSON、XML など) が含まれる場合、Anypoint MQ では送信前にその形式が文字列に変換されるため、ペイロードサイズが増加します。 この変換により、ペイロードが最大ペイロードサイズの 10 MB を超えて、​Payload too large​ エラーが発生する場合があります。

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

[Message Browser (メッセージブラウザー)]​ ページには、ペイロードサイズが 1 MB 未満の場合にのみペイロードが表示されます。 ペイロードサイズが 1 MB 以上の場合、​[Message Browser (メッセージブラウザー)]​ ページにはエラーが表示されます。 この場合は、Anypoint MQ Broker API を使用してメッセージペイロードを表示できます。 「メッセージの取得」​を参照してください。

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

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

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

キューまたはメッセージエクスチェンジへのアクセスを制限する方法は?

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

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

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

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

各リージョン内で、Anypoint MQ サービスは複数の可用性ゾーン (AZ) にデプロイして、高可用性 (HA) を提供します。1 つの可用性ゾーンのサービスがダウンしても、Anypoint MQ サービスはその領域で正常の動作します。リージョンのすべての可用性ゾーンがダウンすると、少なくとも 1 つの可用性ゾーンが復帰するまで Anypoint MQ サービスはそのリージョンで使用できなくなります。Anypoint MQ のストレージソリューションは永続的であるため、サービスが中断される前にすでに Anypoint MQ システムにあったメッセージは保持されます。

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

Anypoint MQ Connector で再試行戦略を使用できますか?

Anypoint MQ Connector では、接続ベースのプロトコルは使用されていないため、再接続戦略は使用できません。代わりに、バックグラウンドで REST が使用されます。

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

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

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

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

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 要求として請求されます。

Anypoint MQ の最大 TPS は?

最大トランザクション/秒 (TPS)

失敗した要求は TPS に含まれます。

Anypoint MQ のキューとエクスチェンジの最大数は?

キューまたはエクスチェンジの最大数はありません。

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

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

FIFO キューでは特別な処理が必要なため、メッセージグループごとに許可されるインフライトメッセージの数は最大 10 個です。 Anypoint MQ では、FIFO キュー内のメッセージグループ数は制限されません。

1 つのキューには、無制限のメッセージ数を含めることができます。転送中かどうかにかかわらず、メッセージの最大存続期間は 2 週間です。この後、Anypoint MQ はメッセージを削除します。

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

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

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

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

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

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

バッチで Anypoint MQ メッセージをアップロードおよび取得できますか?

Anypoint MQ Broker API を使用すると、標準または FIFO キューからメッセージをバッチでアップロードまたは取得できます。 詳細は、 「Anypoint MQ Broker API」​を参照してください。

1 回のコールで最大 10 個のメッセージ (デフォルト) をアップロードまたは取得できます。

バッチ取得操作の場合、​batchSize​ クエリパラメーターを使用して、取得するメッセージ数を指定します。 Anypoint MQ Broker API では、1 回のコールで取得されるメッセージ数が保証されません。 「Anypoint MQ REST API を使用してメッセージを取得する場合、受信するメッセージの数がバッチサイズよりも少ない理由は?」​を参照してください。

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

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

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

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

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

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

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

FIFO キュー​を使用して、メッセージを順番に処理できます。

FIFO キューを使用しない場合、Anypoint MQ Connector を ​consume​ 操作に設定して、メッセージを一度に 1 つずつ処理できます。 この操作では、キューからメッセージを取得するか、使用可能なメッセージがない場合は 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

  1. フローで ​processingStrategy="synchronous"​ を設定します。

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

  2. プロセスを指定の間隔で起動するようにポーリングスコープを設定します。

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:consume​ と ​anypoint-mq:ack​ 間の処理時間がキューの ​[Default Acknowledgement Timeout (デフォルトの肯定応答タイムアウト)]​ 設定の値より高い場合、複数のインフライトメッセージが発生する可能性があります。

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

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

Anypoint MQ Connector は共有リソースをサポートしますか?

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

多数のキューとメッセージエクスチェンジを作成する方法は?

for​ ループ内で ​curl​ コマンドを ​Anypoint MQ Admin API​ と共に使用して、必要な数のキューとメッセージエクスチェンジを作成できます。「Anypoint MQ の REST API」を参照してください。

API 要求/月の使用料金はすべての環境に関係しますか?

はい、使用料金はすべての環境に適用されます。

使用量がライセンスの上限を超えるとどうなりますか?

使用量がライセンスの上限に達しても、Anypoint MQ は動作を続行します。 MuleSoft は、アカウント管理者とチームに請求関連の情報を通知します。

プリフェッチを使用してメッセージを取得した場合に 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"/>

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

キューを削除するには、​「キューを削除する」​を参照してください。

メッセージエクスチェンジを削除する方法は?

メッセージエクスチェンジを削除するには、​「メッセージエクスチェンジを削除する」​を参照してください。