Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerAnypoint MQ API では、REST を使用してメッセージを送受信したり、キューやメッセージエクスチェンジを管理したり、結果を分析したりできます。
Anypoint MQ には次の API が用意されています。
Anypoint MQ のポータルは 開発者ポータル内にあります。
Broker API での次の例は、API にアクセスするワークフローを示しています。
手順:
アプリケーションが Anypoint MQ に要求を送信し、メッセージのロックを保持する期間を設定します。
Anypoint MQ がメッセージとロック ID を送信します。
アプリケーションがメッセージに肯定応答して Anypoint MQ にメッセージの削除を要求するか、アプリケーションがメッセージに否定応答して Anypoint MQ にそのメッセージを他のアプリケーションで使用可能にするように要求します。アプリケーションがメッセージ ID とロック ID を Anypoint MQ に送信します。 詳細は、「ACK および NACK 操作」を参照してください。
何のアクションも実行されずにロックの存続期間が切れると、メッセージは否定応答され、他のアプリケーションで使用できるようにキューに戻されます。
API にアクセスするには、アクセストークンを取得する必要があります。
Anypoint Platform ユーザーのアクセストークンを取得します。
MQ アプリケーションのクライアント ID とクライアントシークレットを指定して、Anypoint MQ からトークンを取得します。
Anypoint Platform ユーザーのアクセストークンを取得します。
Anypoint MQ REST API で接続アプリケーションを使用するには、接続アプリケーションの API アクセスの認証 を参照してください。
それぞれの curl
コマンドについては API セクションで説明します。
Anypoint MQ REST API で接続アプリケーションを使用するには、次を参照してください。
接続アプリケーションの設定。接続アプリケーションを作成します。
OIDC エンドポイントとトークン。アクセストークンを取得します。
Anypoint MQ Admin API および Anypoint MQ Broker API の /authorize エンドポイントでは、接続アプリケーションはサポートされません。
これらのエンドポイントから取得したトークンを使用して接続アプリケーションにアクセスすることはできません。
|
Anypoint MQ Admin API は、Anypoint MQ 管理機能へのアクセス権を提供します。
Admin API を使用して、キュー、メッセージエクスチェンジ、クライアントアプリケーションを作成および管理できます。
1 分以内に個別の環境に対して Anypoint MQ Admin API をコールすると、API によって要求が 1 分あたり 50 トランザクション (TPM) に調整されます。
次の例では、Anypoint MQ Admin API を使用し、curl
を使用してコマンドラインからキューとメッセージルーティングルールを作成します。
Anypoint MQ Admin API にアクセスするには、最初に アクセス管理 API を使用して認証する必要があります。
Admin API を使用するには、Anypoint Platform ユーザーからアクセストークンを取得できます。 アクセストークンは「ベアラー」とも呼ばれます。 アクセストークンのデフォルトの存続期間 (TTL) は 60 分です。
組織 ID と環境 ID は、Anypoint Platform が MQ 内で監査可能なアクションに対して作成する payload.txt
ファイルで取得できます。
「MQ 監査ログ」を参照してください。
アクセストークンを取得するには、次のような curl
コマンドを使用します。
curl -X POST "https://anypoint.mulesoft.com/accounts/login" \
-H "Content-Type: application/json" \
-d '{"username":"USERNAME", "password":"PASSWORD"}'
このコマンドでは、次のような出力が返されます。
{
"access_token": "42424242-4242-4242-4242-424242424242",
"token_type": "bearer",
"redirectUrl": "/home/"
}
"fifo": true
項目を含めることで、Anypoint MQ Admin API を使用して FIFO キューを作成できます。
管理ポータルを使用する組織には、Anypoint MQ FIFO エンタイトルメントが必要です。 Anypoint MQ が使用できるリージョンについては、「Anypoint MQ FAQ」を参照してください。 |
FIFO キューを作成するには、次のような curl
コマンドを使用します。
curl -X PUT "https://anypoint.mulesoft.com/mq/admin/api/v1/organizations/ORGANIZATION_ID/environments/ENVIRONMENT_ID/regions/REGION_ID/destinations/queues/QUEUE_ID" \
--header 'Content-Type: application/json' \
--header 'Authorization: bearer BEARER_TOKEN' \
--data-raw '{
"defaultTtl" : 120000,
"defaultLockTtl" : 10000,
"encrypted" : false,
"fifo" : true
}'
エクスチェンジにパブリッシュされたメッセージのサブセットを特定のキューにルーティングするには、Admin API を使用して、エクスチェンジとキュー間のバインドでメッセージルーティングルールを作成します。
新しいメッセージルーティングルールが有効になるまで最大 15 分かかります。 |
メッセージルーティングルールが設定されていないバインドでは、引き続きエクスチェンジからすべてのメッセージが受信されます。
メッセージルーティングルールを作成するには、次のような curl
コマンドを使用します。
curl -X PUT "https://anypoint.mulesoft.com/mq/admin/api/v1/organizations/ORGANIZATION_ID/environments/ENVIRONMENT_ID/regions/REGION_ID/bindings/exchanges/purchases/queues/premiumPurchases/rules/routing" \
--header 'Authorization: bearer BEARER_TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
"routingRules" : [{
"propertyName" : "itemCategory",
"propertyType" : "STRING",
"matcherType" : "EQ",
"value" : "premium"
}]
}'
このメッセージルーティングルールでは、purchases
エクスチェンジにパブリッシュされたメッセージのうち、名前が itemCategory
で値が premium
のプロパティまたはヘッダーが含まれるすべてのメッセージを premiumPurchases
キューにルーティングします。
既存のルーティングルールを変更するには、新しいメッセージルーティングルール設定を使用して別の PUT
要求を送信します。
PUT
要求でバインドの既存のメッセージルーティングルールを新しいルールに置き換えます。
メッセージルーティングルールへの変更または追加が有効になるまで最大 15 分かかります。
参考情報:
/rules/routing
でサポートされるペイロードは、 Anypoint MQ Admin API でこのエンドポイントを参照してください。
ルーティングプロパティを使用したメッセージのパブリッシュについては、ルーティングプロパティを使用したメッセージの送信 を参照してください。
メッセージルーティングルールの要件は、「要件と制限事項」を参照してください。
Anypoint MQ Broker API では、クライアントがキューとメッセージエクスチェンジからメッセージをパブリッシュ、コンシューム、ルーティング、肯定応答できます。
組織 ID と環境 ID は、Anypoint Platform が MQ 内で監査可能なアクションに対して作成する payload.txt
ファイルで取得できます。「MQ 監査ログ」を参照してください。
次の例では、Anypoint MQ Broker API を使用してメッセージをパブリッシュおよびコンシュームし、curl
を使用してコマンドラインから Anypoint MQ をテストします。
プレースホルダー文字列 ORGANIZATION_ID
を認証およびトークン文字列の適切な値に置き換える必要があります。これらの例では、Postman を使用してキューにアクセスします。
Anypoint MQ および FIFO が使用できるリージョンについては、「Anypoint MQ FAQ」を参照してください。
アクセス (ベアラー) トークンを取得するには、curl などのコマンドか Postman などのアプリケーションを使用する必要があります。次の例では curl を使用しています。 Windows ユーザーの場合、この情報にアクセスする前に curl コマンドをダウンロードする必要があります。
このセクションのアクセストークンは、Broker API でのみ使用できます。Stats API や Admin API では、 このアクセストークンを使用しないでください。
特定の CLIENT_ID
のトークンを取得するためのコールは、すべて同じトークンを返します。
同じ CLIENT_ID
を使用する複数のアプリケーションは、同じトークンを使用します。
トークンは最長 60 分有効です。
失効する前にトークンにアクセスすると、有効期間が 60 分間延長されます。
Broker API アクセストークンを取得する手順は、次のとおりです。
Anypoint Platform にログインします。
[MQ] > [Client Apps (クライアントアプリケーション)] をクリックし、[Add (追加)] アイコン ( の [Add (追加)] アイコン",3%,3%]) をクリックしてアプリケーションを作成します。
クライアント ID とクライアントシークレットを取得し、次の curl コマンドでこれらの値を使用して CLIENT_ID
と CLIENT_SECRET
を置き換えます。
curl -X POST "https://anypoint.mulesoft.com/accounts/oauth2/token" \
-H "Content-Type: application/json" \
-d '{
"client_id": "<CLIENT_ID>",
"client_secret": "<CLIENT_SECRET>",
"grant_type": "client_credentials"
}'
curl
コマンドを送信します。
このコマンドは、次のような出力を返します。
{"access_token":"<token>","simple_client":{"envId":"ENVIRONMENT_ID","orgId":"ORGANIZATION_ID"},"token_type":"bearer"}
次の curl
コマンドではメッセージをパブリッシュします。
curl -X PUT "https://mq-us-east-1.anypoint.mulesoft.com/api/v1/organizations/ORGANIZATION_ID/environments/ENVIRONMENT_ID/destinations/postmanExchange/messages/552" \
-H "Content-Type: application/json" \
-H "Authorization: bearer BEARER_TOKEN" \
-H "Cache-Control: no-cache" \
-d '{
"properties": {
"userDefinedHeader": "User defined stuff",
"anotherUserDefinedHeader": "Random stuff"
},
"body": "This is a message payload"
}'
Anypoint MQ では、設定されたメッセージルーティングルールは、パブリッシュされたメッセージのすべての headers
および properties
属性に対して評価されます。
次の curl
コマンドでは、itemCategory
プロパティの値が premium
であるメッセージをパブリッシュします。
purchases
エクスチェンジバインド (メッセージルーティングルールの作成または変更 でセットアップ) のメッセージルーティングルールでは、メッセージを premiumPurchases
キューにルーティングします。
curl -X PUT "https://mq-us-east-1.anypoint.mulesoft.com/api/v1/organizations/ORGANIZATION_ID/environments/ENVIRONMENT_ID/destinations/postmanExchange/messages/552" \
-H "Content-Type: application/json" \
-H "Authorization: bearer BEARER_TOKEN" \
-H "Cache-Control: no-cache" \
-d '{ \
"properties": {
"itemCategory": "premium",
},
"headers": {
"itemSize": "large"
},
"body": "This is a message payload"
}'
メッセージルーティングルールの要件についての詳細は、「要件と制限事項」を参照してください。
次の curl
コマンドではメッセージを取得します。
curl -X GET "https://mq-us-east-1.anypoint.mulesoft.com/api/v1/organizations/ORGANIZATION_ID/environments/ENVIRONMENT_ID/destinations/postmanQueue/messages?pollingTime=10000&batchSize=1&lockTtl=10000" \
-H "Authorization: bearer BEARER_TOKEN" \
-H "Cache-Control: no-cache"
payloadVisibility
クエリパラメーターをして、応答にメッセージペイロードを表示するかどうかを制御できます。
このパラメーターは、大きなペイロードを取得する場合に役立ちます。
payloadVisibility
パラメーターでは次のオプションを使用します。
full
: 応答にメッセージペイロードを表示します。
このオプションはデフォルトです。
none
: 応答でメッセージペイロードを非表示にします。
conditional
: ペイロードサイズが 1 MB を超えている場合にメッセージペイロードを非表示にします。
payloadVisibility
が none
または conditional
に設定されているためにペイロードが非表示になっている場合、応答のメッセージヘッダーに payloadHidden=true
が含まれます。
次の curl
コマンドではメッセージとペイロードを取得し、ペイロードサイズが 1 MB 未満の場合にのみペイロードを表示します。
curl -X GET "https://mq-us-east-1.anypoint.mulesoft.com/api/v1/organizations/ORGANIZATION_ID/environments/ENVIRONMENT_ID/destinations/postmanQueue/messages?pollingTime=10000&batchSize=1&lockTtl=10000&payloadVisibility=conditional" \
-H "Authorization: bearer BEARER_TOKEN" \
-H "Cache-Control: no-cache"
Anypoint MQ Stats API では、キューおよびメッセージエクスチェンジの統計とメトリクスを取得できます。
Anypoint MQ Stats API を使用して、キューのパフォーマンスの統計分析を実行できます。
Stats API を使用して、以下を取得します。
Anypoint MQ メトリクス:
キューのほぼリアルタイムの統計
キューの履歴統計
メッセージエクスチェンジの履歴統計
使用状況メトリクス
請求目的で組織全体の Anypoint MQ の使用量を表示する。
環境ごとの使用量
組織ごとの使用量
キューとメッセージエクスチェンジの統計
現在キューで待機しているメッセージ数
Anypoint MQ Stats API では、
要求がこの制限を超えた場合、Anypoint MQ Stats API では HTTP 429 状況コードが返されます。 他のすべての Anypoint MQ Stats API エンドポイントの場合、制限は 200 トランザクション/分になります。 |
詳細は、MuleSoft 開発者ポータルの 「Anypoint MQ Stats API」を参照してください。
Anypoint MQ Stats API にアクセスするには、最初に アクセス管理 API を使用して認証する必要があります。 |
Stats API を使用するために、Anypoint Platform ユーザーからアクセストークンを取得できます。
アクセストークンは「ベアラー」とも呼ばれます。
アクセストークンのデフォルトの存続期間 (TTL) は 60 分です。
組織 ID と環境 ID は、Anypoint Platform が MQ 内で監査可能なアクションに対して作成する payload.txt
ファイルで取得できます。「Anypoint MQ 監査ログ」を参照してください。
アクセストークンを取得するには、次の curl
コマンドを使用します。
curl -X POST "https://anypoint.mulesoft.com/accounts/login" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-d '{"username":"USERNAME", "password":"PASSWORD"}'
このコマンドでは、次のような出力が返されます。
{
"access_token": "42424242-4242-4242-4242-424242424242",
"token_type": "bearer",
"redirectUrl": "/home/"
}
キュー内のメッセージの数とインフライトメッセージの数のスナップショットを取得できます。 インフライトメッセージの定義については、Anypoint MQ の用語集を参照してください。 データはほぼリアルタイムで更新されます。
Stats API の応答とメッセージ状況の変更には、内部の後処理アクティビティによる最大 60 秒の不整合が含まれます。 メッセージ状況の変更には、キュー待機中からインフライト、インフライトからキュー待機中、およびインフライトから削除への変更があります。 このため、処理アクション (キューが空かどうかの確認など) の同期に Stats API は使用しないでください。
Stats API は複数のキューの統計をフェッチでき、カンマ区切りリストを返します。
/queues?destinationIds={queue1},{queue2}
要求と応答のサンプル:
キューの現在の統計を取得するには、次の curl
コマンドを使用します。
[source,bash] curl -X GET "https://anypoint.mulesoft.com/mq/stats/api/v1/organizations/ORGANIZATION_ID/environments/ENVIRONMENT_ID/regions/REGION_URL/queues?destinationIds=DESTINATION_ID" \ -H "Authorization: bearer BEARER_TOKEN" \ -H "Cache-Control: no-cache"
このコマンドでは、次のような出力が返されます。
[source,json,linenums] { "destination": "95bgpyxYsVyFE", "messages": 0, "inflightMessages": 0 }
この API を使用してキューの履歴統計をフェッチできますが、履歴統計はリアルタイムでは更新されず、データがパブリッシュされるまでに約 5 ~ 10 分のレイテンシーがあります。履歴データの保持期間は 15 か月間です。また、データ量を抑えるために、履歴データは粒度を下げて保存されます。期間が 60 秒未満のデータポイントの保持期間は 3 時間、1 分のデータポイントは 15 日間、5 分のデータポイントは 63 日間、1 時間のデータポイントは 15 か月間です。
/queues/{queueId}?startDate=…&endDate=…&period=…
要求と応答のサンプル:
キューの履歴統計を取得するには、次の curl
コマンドを使用します。
curl -X GET "https://anypoint.mulesoft.com/mq/stats/api/v1/organizations/ORGANIZATION_ID/environments/ENVIRONMENT_ID/regions/REGION_URL/queues/95bgpyxYsVyFE?startDate=Thursday, 8 Nov 2018 04:49:37 GMT&endDate=Sun, 11 Nov 2018 04:60:44 GMT&period=600" \
-H "Authorization: bearer BEARER_TOKEN" \
-H "Cache-Control: no-cache"
このコマンドでは、次のような出力が返されます。
{
"destination": "95bgpyxYsVyFE",
"messages": [
{
"date": "2018-11-08T04:59:37.000+0000",
"value": 0
},
{
"date": "2018-11-08T05:09:37.000+0000",
"value": 0
}
]
}
期間は整数であり、秒単位のデータポイントの粒度です。
保持ポリシーは前の キューの履歴統計の取得 セクションと同じです。
/exchanges/{exchangeId}?startDate=…&endDate=…&period=…
要求と応答のサンプル:
エクスチェンジの履歴統計を取得するには、次の curl
コマンドを使用します。
curl -X GET "https://anypoint.mulesoft.com/mq/stats/api/v1/organizations/ORGANIZATION_ID/environments/ENVIRONMENT_ID/regions/REGION_URL/exchanges/exchange-test?startDate=Wed%2C%2014%20Nov%202018%2021%3A53%3A08%20GMT&endDate=Wed%2C%2014%20Nov%202018%2022%3A53%3A08%20GMT&period=360" \
-H "Authorization: bearer BEARER_TOKEN" \
-H "Cache-Control: no-cache"
このコマンドでは、次のような出力が返されます。
{
"destination": "exchange-test",
"messagesPublished": [
{
"date": "2018-11-14T21:59:08.000+0000",
"value": 0
}
]
}
期間は整数であり、秒単位のデータポイントの粒度です。
Stats API を使用して、特定の組織の Anypoint MQ 使用量情報を環境別に取得できます。
/environments/ENVIRONMENT_ID?startDate=…&endDate=…&period=…
この情報はリアルタイムではないため、レイテンシーがあります。
Anypoint MQ Stats API では、
要求がこの制限を超えた場合、Anypoint MQ Stats API では HTTP 429 状況コードが返されます。 他のすべての Anypoint MQ Stats API エンドポイントの場合、制限は 200 トランザクション/分になります。 |
要求と応答のサンプル:
環境別の使用状況メトリクスを取得するには、次の curl
コマンドを使用します。
curl -X GET "https://anypoint.mulesoft.com/mq/stats/api/v1/organizations/ORGANIZATION_ID/environments/ENVIRONMENT_ID?startDate=Thursday, 8 Nov 2021 04:49:37 GMT&endDate=Sun, 11 Nov 2021 04:60:44 GMT&period=1day" \
-H "Authorization: bearer BEARER_TOKEN" \
-H "Cache-Control: no-cache"
このコマンドでは、次のような出力が返されます。
{
"timestamp": "2021-11-08T00:00Z",
"apiRequestCount": 127,
"messageReceiptCount": 11,
"billableUnitCount": 11,
"messageByteCount": 6148
}
apiRequestCount
では、指定した期間の Anypoint MQ サービスへの API 要求数が返されます。
Broker API へのすべての要求が月次クォータに含まれます。 要求には、メッセージの送信、受信、および肯定応答のほか、キューおよび交換に対するすべての操作が含まれます。
Anypoint MQ 請求についての詳細は、使用量グラフの表示を参照してください。
Anypoint MQ では請求で messageReceiptCount と billableUnitCount は使用されないため、これらを安全に無視できます。
Anypoint MQ では messageReceiptCount を使用して、[MQ Usage (MQ 使用量)] ページに表示するメッセージ単位が決定されます。billableUnitCount は、messageReceiptCount と同じ値に設定された、内部で使用する値です。
|
Stats API を使用して、ルートビジネス組織における Anypoint MQ の使用量を取得できます。
/organizations/ORGANIZATION_ID?startDate=…&endDate=…&period=…
Anypoint MQ Stats API では、
要求がこの制限を超えた場合、Anypoint MQ Stats API では HTTP 429 状況コードが返されます。 他のすべての Anypoint MQ Stats API エンドポイントの場合、制限は 200 トランザクション/分になります。 |
要求と応答のサンプル:
1 か月間の組織別の 1 日の使用状況メトリクスを取得するには、次の curl
コマンドを使用します。
curl -X GET "https://anypoint.mulesoft.com/mq/stats/api/v1/organizations/ORGANIZATION_ID?startDate=Sun, 1 Oct 2023 04:49:37 GMT&endDate=Tue, 31 Oct 2023 04:50:44 GMT&period=1day" \
-H "Authorization: bearer BEARER_TOKEN" \
-H "Cache-Control: no-cache"
このコマンドでは、次のような出力が返されます。
{
"timestamp": "2023-10-31T00:00Z",
"apiRequestCount": 1066,
"messageReceiptCount": 194,
"billableUnitCount": 194,
"messageByteCount": 107048
}
apiRequestCount
では、指定した期間の Anypoint MQ サービスへの API 要求数が返されます。
Broker API へのすべての要求が月次クォータに含まれます。 要求には、メッセージの送信、受信、および肯定応答のほか、キューおよび交換に対するすべての操作が含まれます。
Anypoint MQ 請求についての詳細は、使用量グラフの表示を参照してください。
Anypoint MQ では請求で messageReceiptCount と billableUnitCount は使用されないため、これらを安全に無視できます。
Anypoint MQ では messageReceiptCount を使用して、[MQ Usage (MQ 使用量)] ページに表示するメッセージ単位が決定されます。billableUnitCount は、messageReceiptCount と同じ値に設定された、内部で使用する値です。
|
Anypoint MQ Stats API にアクセスするには、最初に アクセス管理 API を使用して認証する必要があります。 |
次の統計が提供されます。
messagesVisible
キューから取得できるメッセージ数。
messagesSent
キューに追加されたメッセージ数。
messagesReceived
キューで受信したメッセージ数。
messagesAcked
肯定応答されたメッセージの数。[Anypoint Platform] > [MQ] ユーザーインターフェースを使用して削除されたメッセージも含まれます。
2022 年 7 月 26 日から 7 月 28 日までの統計をリストする要求の例:
curl -X GET "https://anypoint.mulesoft.com/mq/stats/api/v1/organizations/ORGANIZATION_ID/environments/ENVIRONMENT_ID/regions/REGION_URL/queues/randomQueue/?startDate=Thu%2C%2026%20Jul%202022%2000%3A00%3A00%20GMT&endDate=Sat%2C%2028%20Jul%202022%2020%3A00%3A00%20GMT&period=600" \
-H "authorization: Bearer BEARER_TOKEN" \
-H "cache-control: no-cache"
このコマンドでは、次のような出力が返されます。
{
"destination": "myDestination",
"messages": [
{
"date": "2018-07-26T00:00:00.000+0000",
"value": 2126
},
{
"date": "2018-07-27T00:00:00.000+0000",
"value": 2126
},
{
"date": "2018-07-28T00:00:00.000+0000",
"value": 587
}
],
"inflightMessages": [
{
"date": "2018-07-26T00:00:00.000+0000",
"value": 0
},
{
"date": "2018-07-27T00:00:00.000+0000",
"value": 0
},
{
"date": "2018-07-28T00:00:00.000+0000",
"value": 0
}
],
"messagesVisible": [
{
"date": "2018-07-26T00:00:00.000+0000",
"value": 2126
},
{
"date": "2018-07-27T00:00:00.000+0000",
"value": 2126
},
{
"date": "2018-07-28T00:00:00.000+0000",
"value": 587
}
],
"messagesSent": [
{
"date": "2018-07-26T00:00:00.000+0000",
"value": 0
},
{
"date": "2018-07-27T00:00:00.000+0000",
"value": 0
},
{
"date": "2018-07-28T00:00:00.000+0000",
"value": 0
}
],
"messagesReceived": [
{
"date": "2018-07-26T00:00:00.000+0000",
"value": 0
},
{
"date": "2018-07-27T00:00:00.000+0000",
"value": 0
},
{
"date": "2018-07-28T00:00:00.000+0000",
"value": 0
}
],
"messagesAcked": [
{
"date": "2018-07-26T00:00:00.000+0000",
"value": 0
},
{
"date": "2018-07-27T00:00:00.000+0000",
"value": 0
},
{
"date": "2018-07-28T00:00:00.000+0000",
"value": 0
}
]
}
プログラムでキューとエクスチェンジを作成する場合、Groovy などの言語を使用できます。
次の例は、作成するキューとエクスチェンジをリストする cloudhub.properties
ファイル、およびプロパティファイルを参照するスクリプトファイルで構成されます。
Anypoint Platform アカウントにアクセスするプロパティファイルを変更したら、このコマンドを使用してスクリプトファイルを起動します。
groovy <program_name>.groovy
次のプロパティファイルの例は、アクセスログイン情報、 組織 ID、環境 ID、領域 ID、 および作成するキューとエクスチェンジの名前を定義します。
username="<anypoint_platform_username>"
password="<anypoint_platform_password>"
organizationID="ORGANIZATION_ID"
environmentID {
development="DEVELOPMENT_ENVIRONMENT_ID"
qa="QA_ENVIRONMENT_ID"
staging="STAGING_ENVIRONMENT_ID"
production="PRODUCTION_ENVIRONMENT_ID"
}
regionID="REGION_URL"
queues=[
"Queue1",
"Queue2",
"QueueN",
]
exchanges=[
"Exchange1",
"Exchange2",
"ExchangeN"
]
Anypoint MQ および FIFO キューが使用できるリージョンについては、「Anypoint MQ FAQ」を参照してください。
次のスクリプトの例は、プロパティファイルにリストされるキューとエクスチェンジを作成します。
package guru.oso.mule
@Grab(group = 'org.apache.httpcomponents', module = 'httpclient', version = '4.5.3')
import groovy.json.JsonBuilder
import groovy.json.JsonSlurper
import org.apache.http.client.methods.HttpGet
import org.apache.http.client.methods.HttpPost
import org.apache.http.client.methods.HttpPut
import org.apache.http.entity.StringEntity
import org.apache.http.impl.client.HttpClientBuilder
class AnypointMQAdminClient {
static String HOST = "https://anypoint.mulesoft.com"
static void main(String[] args) {
def props
if (args) {
props = new ConfigSlurper().parse(new File(args[0]).toURI().toURL())
} else {
props = new ConfigSlurper().parse(new File("cloudhub.properties").toURI().toURL())
}
def ENVIRONMENT_ID = props.environmentID.production
def token = authenticate(props.username, props.password)
retrieveDestinations(props, token, ENVIRONMENT_ID)
}
static authenticate(String username, String password) {
// build JSON
def map = [:]
map["username"] = username
map["password"] = password
def jsonBody = new JsonBuilder(map).toString()
// build HTTP POST
def url = HOST + '/accounts/login'
def post = new HttpPost(url)
post.addHeader("Content-Type", "application/json")
post.setEntity(new StringEntity(jsonBody))
// execute
def client = HttpClientBuilder.create().build()
def response = client.execute(post)
// read and print response
def bufferedReader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()))
def jsonResponse = bufferedReader.getText()
println "Response: \n" + jsonResponse
// parse and return token
def slurper = new JsonSlurper()
def resultMap = slurper.parseText(jsonResponse)
return resultMap["access_token"]
}
static retrieveDestinations(ConfigObject props, String token, String ENVIRONMENT_ID) {
def ORGANIZATION_ID = props.organizationID
def REGION_URL = props.regionID
// build HTTP GET
def getDestinationsURL = HOST + '/mq/admin/api/v1/organizations/' + ORGANIZATION_ID +
'/environments/' + ENVIRONMENT_ID + '/regions/' + REGION_URL + '/destinations'
def getDestinations = new HttpGet(getDestinationsURL)
// set token
getDestinations.setHeader("Authorization", "Bearer " + token)
// execute
def client = HttpClientBuilder.create().build()
def response = client.execute(getDestinations)
// parse and print results
def bufferedReader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()))
def jsonResponse = bufferedReader.getText()
println "Response: \n" + jsonResponse
}
static retrieveQueue(ConfigObject props, String token, String ENVIRONMENT_ID, String QUEUE_ID) {
def ORGANIZATION_ID = props.organizationID
def REGION_URL = props.regionID
// build HTTP GET
def getQueueURL = HOST + '/mq/admin/api/v1/organizations/' + ORGANIZATION_ID + '/environments/' +
ENVIRONMENT_ID + '/regions/' + REGION_URL + '/destinations/queues/' + QUEUE_ID
def getQueue = new HttpGet(getQueueURL)
// set token
getQueue.addHeader("Authorization", "Bearer " + token)
// execute
def client = HttpClientBuilder.create().build()
def response = client.execute(getQueue)
// parse and print results
def bufferedReader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()))
def jsonResponse = bufferedReader.getText()
println "Response: \n" + jsonResponse
}
static createQueues(ConfigObject props, String token, String ENVIRONMENT_ID) {
def ORGANIZATION_ID = props.organizationID
def REGION_URL = props.regionID
def queues = props.queues
queues.each { QUEUE_ID ->
def putQueueURL = HOST + '/mq/admin/api/v1/organizations/' + ORGANIZATION_ID + '/environments/' +
ENVIRONMENT_ID + '/regions/' + REGION_URL + '/destinations/queues/' + QUEUE_ID
def putQueue = new HttpPut(putQueueURL)
putQueue.addHeader("Content-Type", "application/json")
putQueue.addHeader("Authorization", "Bearer " + token)
def queueMap = [:]
queueMap["defaultTtl"] = 604800000
queueMap["defaultLockTtl"] = 120000
queueMap["encrypted"] = false
queueMap["fifo"] = false
def putQueueJSONBody = new JsonBuilder(queueMap).toString()
putQueue.setEntity(new StringEntity(putQueueJSONBody))
def client = HttpClientBuilder.create().build()
def response = client.execute(putQueue)
def bufferedReader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()))
def jsonResponse = bufferedReader.getText()
println "Response: \n" + jsonResponse
}
}
static createExchanges(ConfigObject props, String token, String ENVIRONMENT_ID) {
def ORGANIZATION_ID = props.organizationID
def REGION_URL = props.regionID
def exchanges = props.exchanges
exchanges.each { exchangeID ->
def putExchangeURL = HOST + '/mq/admin/api/v1/organizations/' + ORGANIZATION_ID + '/environments/' + ENVIRONMENT_ID + '/regions/' + REGION_URL + '/destinations/exchanges/' + EXCHANGE_ID
def putExchange = new HttpPut(putExchangeURL)
putExchange.addHeader("Content-Type", "application/json")
putExchange.addHeader("Authorization", "Bearer " + token)
def exchangeMap = [:]
exchangeMap["encrypted"] = false
def putExchangeJSONBody = new JsonBuilder(exchangeMap).toString()
putExchange.setEntity(new StringEntity(putExchangeJSONBody))
def client = HttpClientBuilder.create().build()
def response = client.execute(putExchange)
def bufferedReader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()))
def jsonResponse = bufferedReader.getText()
println "Response: \n" + jsonResponse
}
}
}
この例では、Postman、Anypoint Studio、ブラウザーから Anypoint MQ をテストできます。
Postman アプリケーションは、Anypoint MQ API にアクセスするプラットフォームを提供します。 Postman をダウンロードしてインストールしたら、次の情報を指定して環境を作成します。
ORGANIZATION_ID
ENVIRONMENT_ID
ベアラー (認証) トークン
ホスト ID (Anypoint Platform/Anypoint MQ から)
クライアント ID (Anypoint Platform/Anypoint MQ から)
クライアントシークレット (Anypoint Platform/Anypoint MQ から)
キュー名 (Postman でこのキュー名を設定可能)
Anypoint MQ API へのアクセスを許可したら、メッセージをパブリッシュしたり、メッセージをコンシュームしたり、返された body の情報からロック ID を取得したりします。
たとえば、次の情報がコンシューム (GET) コマンドから返されます。
{
"properties": {
"anotherUserDefinedHeader": "Random stuff",
"userDefinedHeader": "User defined stuff"
},
"headers": {
"messageId": "514",
"lockId": "<lockIDvalue>",
"created": "Tue, 23 Oct 2018 21:17:57 GMT",
"deliveryCount": "2"
},
...
ロック ID を取得したら、それを Postman 環境に追加してその後の要求を容易にできます。
Anypoint Studio では、Anypoint MQ Connector を使用する Mule アプリケーションを作成できます。 このセクションでは手順が要約されています。
次の要素で Studio プロジェクトをセットアップできます。
HTTP Connector:
ホスト: 0.0.0.0
ポート: 8081
パス: プロパティメニューで /mq/{messageId}
に設定。
Anypoint MQ Connector: [Anypoint Platform] > [MQ] からクライアント ID とクライアントシークレットを取得し、[宛先] を Postman で作成されたキューに設定。
ロガー: [Message (メッセージ)] を値 \#[payload]
に設定。
Package Explorer ウィンドウでプロジェクト名を右クリックし、[Run As (別のユーザーとして実行)] > [Mule Application (Mule アプリケーション)] をクリックします。
コンソールメッセージが値 DEPLOYED
で終わっていることを確認します。
Postman で、新しいメッセージをパブリッシュします。