---
schema_version: "1"
id: e7d7ff90eb4d8e388b3c796f7fbd63b6133c8ae849b4a8fd7c76c641351446bd
title: Anypoint MQ の REST API
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/mq/mq-apis.md
canonical_url: https://docs.mulesoft.com/jp/mq/mq-apis
source_site: docs.mulesoft.com
content_type: documentation
content_hash: d4a889d390fe532e18385a66b66c5994e174ccbcb17fe3297295d7c6be747eee
description: MuleSoft Documentation Site
latest: true
---
# Anypoint MQ の REST API

Anypoint MQ API では、REST を使用してメッセージを送受信したり、キューやメッセージエクスチェンジを管理したり、結果を分析したりできます。

Anypoint MQ には次の API が用意されています。

- [Anypoint MQ Admin API](#mqadminapi)
- [Anypoint MQ Broker API](#mqbrokerapi)
- [Anypoint MQ Stats API](#mqstatapi)

Anypoint MQ のポータルは [開発者ポータル](https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/)​内にあります。

## [](#api-のワークフロー)API のワークフロー

Broker API での次の例は、API にアクセスするワークフローを示しています。

![mq api workflow](/mulesoft/current/ja-jp/mq/_images/mq-api-workflow.png)

手順:

1. アプリケーションが Anypoint MQ に要求を送信し、メッセージのロックを保持する期間を設定します。
2. Anypoint MQ がメッセージとロック ID を送信します。
3. アプリケーションがメッセージに肯定応答して Anypoint MQ にメッセージの削除を要求するか、アプリケーションがメッセージに否定応答して Anypoint MQ にそのメッセージを他のアプリケーションで使用可能にするように要求します。アプリケーションがメッセージ ID とロック ID を Anypoint MQ に送信します。 詳細は、​[「ACK および NACK 操作」](https://docs.mulesoft.com/jp/anypoint-mq-connector/latest/anypoint-mq-ack)​を参照してください。
4. 何のアクションも実行されずにロックの存続期間が切れると、メッセージは否定応答され、他のアプリケーションで使用できるようにキューに戻されます。

## [](#authorize-api)API アクセスの認証

API にアクセスするには、アクセストークンを取得する必要があります。

- [Anypoint MQ Admin API](#mqadminapi)
    
    Anypoint Platform ユーザーのアクセストークンを取得します。
- [Anypoint MQ Broker API](#mqbrokerapi)
    
    MQ アプリケーションのクライアント ID とクライアントシークレットを指定して、Anypoint MQ からトークンを取得します。
- [Anypoint MQ Stats API](#mqstatapi)
    
    Anypoint Platform ユーザーのアクセストークンを取得します。

Anypoint MQ REST API で接続アプリケーションを使用するには、​[接続アプリケーションの API アクセスの認証](#authorize-api-connected-apps)​ を参照してください。

それぞれの ​`curl`​ コマンドについては API セクションで説明します。

### [](#authorize-api-connected-apps)接続アプリケーションの API アクセスの認証

Anypoint MQ REST API で接続アプリケーションを使用するには、次を参照してください。

- [接続アプリケーションの設定](https://docs.mulesoft.com/jp/mq/mq-connected-apps)。接続アプリケーションを作成します。
- [OIDC エンドポイントとトークン](https://docs.mulesoft.com/jp/access-management/connected-apps-developers#oidc-endpoints-and-tokens)​。アクセストークンを取得します。

<table><tbody><tr><td class="icon"><i class="fa icon-note" title="Note"></i></td><td class="content">Anypoint MQ Admin API および Anypoint MQ Broker API の ​<code>/authorize</code>​ エンドポイントでは、接続アプリケーションはサポートされません。 これらのエンドポイントから取得したトークンを使用して接続アプリケーションにアクセスすることはできません。</td></tr></tbody></table>

## [](#mqadminapi)Anypoint MQ Admin API

Anypoint MQ Admin API は、Anypoint MQ 管理機能へのアクセス権を提供します。

[Admin API](https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7-23abe036327a.anypoint-platform/anypoint-mq-admin/)​ を使用して、キュー、メッセージエクスチェンジ、クライアントアプリケーションを作成および管理できます。

1 分以内に個別の環境に対して Anypoint MQ Admin API をコールすると、API によって要求が 1 分あたり 50 トランザクション (TPM) に調整されます。

次の例では、Anypoint MQ Admin API を使用し、​`curl`​ を使用してコマンドラインからキューとメッセージルーティングルールを作成します。

- [アクセストークンの取得](#get-access-token)
- [FIFO キューの作成](#fifo-queue-api)
- [メッセージルーティングルールの作成または変更](#routing-rules-api)

### [](#get-access-token)アクセストークンの取得

Anypoint MQ Admin API にアクセスするには、最初に [アクセス管理 API](https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7-23abe036327a.anypoint-platform/access-management-api/)​ を使用して認証する必要があります。

Admin API を使用するには、Anypoint Platform ユーザーからアクセストークンを取得できます。 アクセストークンは「ベアラー」とも呼ばれます。 アクセストークンのデフォルトの存続期間 (TTL) は 60 分です。

組織 ID と環境 ID は、Anypoint Platform が MQ 内で監査可能なアクションに対して作成する ​`payload.txt`​ ファイルで取得できます。 [「MQ 監査ログ」](https://docs.mulesoft.com/jp/access-management/audit-logging#to-query-audit-logging-for-anypoint-mq)​を参照してください。

アクセストークンを取得するには、次のような ​`curl`​ コマンドを使用します。

```bash
curl -X POST "https://anypoint.mulesoft.com/accounts/login" \
-H "Content-Type: application/json" \
-d '{"username":"USERNAME", "password":"PASSWORD"}'
```

このコマンドでは、次のような出力が返されます。

```json
{
  "access_token": "42424242-4242-4242-4242-424242424242",
  "token_type": "bearer",
  "redirectUrl": "/home/"
}
```

### [](#fifo-queue-api)FIFO キューの作成

`"fifo": true`​ 項目を含めることで、Anypoint MQ Admin API を使用して FIFO キューを作成できます。

<table><tbody><tr><td class="icon"><i class="fa icon-note" title="Note"></i></td><td class="content">管理ポータルを使用する組織には、Anypoint MQ FIFO エンタイトルメントが必要です。 Anypoint MQ が使用できるリージョンについては、​<a href="https://docs.mulesoft.com/jp/mq/mq-faq" class="xref page">「Anypoint MQ FAQ」</a>​を参照してください。</td></tr></tbody></table>

FIFO キューを作成するには、次のような ​`curl`​ コマンドを使用します。

```bash
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
}'
```

### [](#routing-rules-api)メッセージルーティングルールの作成または変更

エクスチェンジにパブリッシュされたメッセージのサブセットを特定のキューにルーティングするには、Admin API を使用して、エクスチェンジとキュー間のバインドでメッセージルーティングルールを作成します。

<table><tbody><tr><td class="icon"><i class="fa icon-note" title="Note"></i></td><td class="content">新しいメッセージルーティングルールが有効になるまで最大 15 分かかります。</td></tr></tbody></table>

メッセージルーティングルールが設定されていないバインドでは、引き続きエクスチェンジからすべてのメッセージが受信されます。

メッセージルーティングルールを作成するには、次のような ​`curl`​ コマンドを使用します。

```bash
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](https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7-23abe036327a.anypoint-platform/anypoint-mq-admin/minor/1.0/console/method/%23741/)​ でこのエンドポイントを参照してください。
- ルーティングプロパティを使用したメッセージのパブリッシュについては、​[ルーティングプロパティを使用したメッセージの送信](#send-message-routing)​ を参照してください。
- メッセージルーティングルールの要件は、​[「要件と制限事項」](https://docs.mulesoft.com/jp/mq/mq-routing-rules#intelligent-routing-restrictions)​を参照してください。

## [](#mqbrokerapi)Anypoint MQ Broker API

[Anypoint MQ Broker API](https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7-23abe036327a.anypoint-platform/anypoint-mq-broker/)​ では、クライアントがキューとメッセージエクスチェンジからメッセージをパブリッシュ、コンシューム、ルーティング、肯定応答できます。

組織 ID と環境 ID は、Anypoint Platform が MQ 内で監査可能なアクションに対して作成する ​`payload.txt`​ ファイルで取得できます。​[「MQ 監査ログ」](https://docs.mulesoft.com/jp/access-management/audit-logging#to-query-audit-logging-for-anypoint-mq)​を参照してください。

次の例では、Anypoint MQ Broker API を使用してメッセージをパブリッシュおよびコンシュームし、​`curl`​ を使用してコマンドラインから Anypoint MQ をテストします。

- [Broker API アクセストークンの取得](#get-broker-access-token)
- [メッセージの送信](#send-messages-api)
- [ルーティングプロパティを使用したメッセージの送信](#send-message-routing)
- [メッセージの取得](#retrieve-message-api)

プレースホルダー文字列 ​`ORGANIZATION_ID`​ を認証およびトークン文字列の適切な値に置き換える必要があります。これらの例では、Postman を使用してキューにアクセスします。

Anypoint MQ および FIFO が使用できるリージョンについては、​[「Anypoint MQ FAQ」](https://docs.mulesoft.com/jp/mq/mq-faq#regions)​を参照してください。

### [](#get-broker-access-token)Broker API アクセストークンの取得

アクセス (ベアラー) トークンを取得するには、curl などのコマンドか Postman などのアプリケーションを使用する必要があります。次の例では curl を使用しています。 Windows ユーザーの場合、この情報にアクセスする前に [curl コマンドをダウンロード](https://curl.haxx.se/download.html)​する必要があります。

このセクションのアクセストークンは、Broker API でのみ使用できます。Stats API や Admin API では、 このアクセストークンを使用しないでください。

特定の ​`CLIENT_ID`​ のトークンを取得するためのコールは、すべて同じトークンを返します。 同じ ​`CLIENT_ID`​ を使用する複数のアプリケーションは、同じトークンを使用します。 トークンは最長 60 分有効です。 失効する前にトークンにアクセスすると、有効期間が 60 分間延長されます。

Broker API アクセストークンを取得する手順は、次のとおりです。

1. Anypoint Platform にログインします。
2. **\[MQ\]**​ > ​**\[Client Apps (クライアントアプリケーション)\]**​ をクリックし、​**\[Add (追加)\]**​ アイコン (​!["\[Client Apps (クライアントアプリケーション)](/mulesoft/current/ja-jp/mq/_images/icon-blue-plus.png) の \[Add (追加)\] アイコン",3%,3%\]​) をクリックしてアプリケーションを作成します。
3. クライアント ID とクライアントシークレットを取得し、次の curl コマンドでこれらの値を使用して ​`CLIENT_ID`​ と ​`CLIENT_SECRET`​ を置き換えます。
    
    ```bash
    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"
    }'
    ```
4. `curl`​ コマンドを送信します。
    
    このコマンドは、次のような出力を返します。
    
    ```json
    {"access_token":"<token>","simple_client":{"envId":"ENVIRONMENT_ID","orgId":"ORGANIZATION_ID"},"token_type":"bearer"}
    ```

### [](#send-messages-api)メッセージの送信

次の ​`curl`​ コマンドではメッセージをパブリッシュします。

```bash
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"
}'
```

### [](#send-message-routing)ルーティングプロパティを使用したメッセージの送信

Anypoint MQ では、設定されたメッセージルーティングルールは、パブリッシュされたメッセージのすべての ​`headers`​ および ​`properties`​ 属性に対して評価されます。

次の ​`curl`​ コマンドでは、​`itemCategory`​ プロパティの値が ​`premium`​ であるメッセージをパブリッシュします。 `purchases`​ エクスチェンジバインド (​[メッセージルーティングルールの作成または変更](#routing-rules-api)​ でセットアップ) のメッセージルーティングルールでは、メッセージを ​`premiumPurchases`​ キューにルーティングします。

```bash
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"
}'
```

メッセージルーティングルールの要件についての詳細は、​[「要件と制限事項」](https://docs.mulesoft.com/jp/mq/mq-routing-rules#intelligent-routing-restrictions)​を参照してください。

### [](#retrieve-message-api)メッセージの取得

次の ​`curl`​ コマンドではメッセージを取得します。

```bash
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 未満の場合にのみペイロードを表示します。

```bash
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"
```

## [](#mqstatapi)Anypoint MQ Stats API

Anypoint MQ Stats API では、キューおよびメッセージエクスチェンジの統計とメトリクスを取得できます。

[Anypoint MQ Stats API](https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7-23abe036327a.anypoint-platform/anypoint-mq-stats/)​ を使用して、キューのパフォーマンスの統計分析を実行できます。

Stats API を使用して、以下を取得します。

- Anypoint MQ メトリクス:
    
    - キューのほぼリアルタイムの統計
    - キューの履歴統計
    - メッセージエクスチェンジの履歴統計
- 使用状況メトリクス
    
    請求目的で組織全体の Anypoint MQ の使用量を表示する。
    
    - 環境ごとの使用量
    - 組織ごとの使用量
- キューとメッセージエクスチェンジの統計
- 現在キューで待機しているメッセージ数

<table>
<tbody><tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="paragraph">
<p>Anypoint MQ Stats API では、
 <a href="https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7-23abe036327a.anypoint-platform/anypoint-mq-stats/minor/1.0/console/method/%23318/" target="_blank" rel="noopener"><code>/organizations/{ORGANIZATION_ID}</code>​</a>​ および
 <a href="https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7-23abe036327a.anypoint-platform/anypoint-mq-stats/minor/1.0/console/method/%23378/" target="_blank" rel="noopener"><code>/organizations/{ORGANIZATION_ID}/environments/{ENVIRONMENT_ID}</code>​</a>​ エンドポイントの統計情報の取得が 10 トランザクション/分 (TPM) に制限されます。</p>
</div>
<div class="paragraph">
<p>要求がこの制限を超えた場合、Anypoint MQ Stats API では HTTP 429 状況コードが返されます。</p>
</div>
<div class="paragraph">
<p>他のすべての  <a href="https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7-23abe036327a.anypoint-platform/anypoint-mq-stats/minor/1.0/console/summary/" target="_blank" rel="noopener">Anypoint MQ Stats API</a>​ エンドポイントの場合、制限は 200 トランザクション/分になります。</p>
</div>
</td>
</tr>
</tbody></table>

詳細は、MuleSoft 開発者ポータルの [「Anypoint MQ Stats API」](https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7-23abe036327a.anypoint-platform/anypoint-mq-stats/)​を参照してください。

### [](#get-stats-access-token)Stats API アクセストークンの取得

<table><tbody><tr><td class="icon"><i class="fa icon-note" title="Note"></i></td><td class="content">Anypoint MQ Stats API にアクセスするには、最初に <a href="https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7-23abe036327a.anypoint-platform/access-management-api/" target="_blank" rel="noopener">アクセス管理 API</a>​ を使用して認証する必要があります。</td></tr></tbody></table>

Stats API を使用するために、Anypoint Platform ユーザーからアクセストークンを取得できます。 アクセストークンは「ベアラー」とも呼ばれます。 アクセストークンのデフォルトの存続期間 (TTL) は 60 分です。 組織 ID と環境 ID は、Anypoint Platform が MQ 内で監査可能なアクションに対して作成する ​`payload.txt`​ ファイルで取得できます。​[「Anypoint MQ 監査ログ」](https://docs.mulesoft.com/jp/access-management/audit-logging#to-query-audit-logging-for-anypoint-mq)​を参照してください。

アクセストークンを取得するには、次の ​`curl`​ コマンドを使用します。

```bash
curl -X POST "https://anypoint.mulesoft.com/accounts/login" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-d '{"username":"USERNAME", "password":"PASSWORD"}'
```

このコマンドでは、次のような出力が返されます。

```json
{
  "access_token": "42424242-4242-4242-4242-424242424242",
  "token_type": "bearer",
  "redirectUrl": "/home/"
}
```

### [](#キューの現在の統計の取得)キューの現在の統計の取得

キュー内のメッセージの数とインフライトメッセージの数のスナップショットを取得できます。 インフライトメッセージの定義については、[Anypoint MQ の用語集](https://docs.mulesoft.com/jp/mq/mq-glossary)を参照してください。 データはほぼリアルタイムで更新されます。

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
 }

### [](#historical-stats-queue)キューの履歴統計の取得

この API を使用してキューの履歴統計をフェッチできますが、履歴統計はリアルタイムでは更新されず、データがパブリッシュされるまでに約 5 ～ 10 分のレイテンシーがあります。履歴データの保持期間は 15 か月間です。また、データ量を抑えるために、履歴データは粒度を下げて保存されます。期間が 60 秒未満のデータポイントの保持期間は 3 時間、1 分のデータポイントは 15 日間、5 分のデータポイントは 63 日間、1 時間のデータポイントは 15 か月間です。

`/queues/{queueId}?startDate=…​&endDate=…​&period=…​`

**要求と応答のサンプル:**

キューの履歴統計を取得するには、次の ​`curl`​ コマンドを使用します。

```bash
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"
```

このコマンドでは、次のような出力が返されます。

```json
  {
    "destination": "95bgpyxYsVyFE",
    "messages": [
        {
            "date": "2018-11-08T04:59:37.000+0000",
            "value": 0
        },
        {
            "date": "2018-11-08T05:09:37.000+0000",
            "value": 0
        }
    ]
  }
```

期間は整数であり、秒単位のデータポイントの粒度です。

### [](#historical-stats-exchange)エクスチェンジの履歴統計の取得

保持ポリシーは前の ​[キューの履歴統計の取得](#historical-stats-queue)​ セクションと同じです。

`/exchanges/{exchangeId}?startDate=…​&endDate=…​&period=…​`

**要求と応答のサンプル:**

エクスチェンジの履歴統計を取得するには、次の ​`curl`​ コマンドを使用します。

```bash
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"
```

このコマンドでは、次のような出力が返されます。

```json
{
    "destination": "exchange-test",
    "messagesPublished": [
        {
            "date": "2018-11-14T21:59:08.000+0000",
            "value": 0
        }
     ]
}
```

期間は整数であり、秒単位のデータポイントの粒度です。

### [](#usage-by-env)環境別の使用状況メトリクスの取得

Stats API を使用して、特定の組織の Anypoint MQ 使用量情報を環境別に取得できます。

`/environments/ENVIRONMENT_ID?startDate=…​&endDate=…​&period=…​`

この情報はリアルタイムではないため、レイテンシーがあります。

<table>
<tbody><tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="paragraph">
<p>Anypoint MQ Stats API では、
 <a href="https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7-23abe036327a.anypoint-platform/anypoint-mq-stats/minor/1.0/console/method/%23318/" target="_blank" rel="noopener"><code>/organizations/{ORGANIZATION_ID}</code>​</a>​ および
 <a href="https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7-23abe036327a.anypoint-platform/anypoint-mq-stats/minor/1.0/console/method/%23378/" target="_blank" rel="noopener"><code>/organizations/{ORGANIZATION_ID}/environments/{ENVIRONMENT_ID}</code>​</a>​ エンドポイントの統計情報の取得が 10 トランザクション/分 (TPM) に制限されます。</p>
</div>
<div class="paragraph">
<p>要求がこの制限を超えた場合、Anypoint MQ Stats API では HTTP 429 状況コードが返されます。</p>
</div>
<div class="paragraph">
<p>他のすべての  <a href="https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7-23abe036327a.anypoint-platform/anypoint-mq-stats/minor/1.0/console/summary/" target="_blank" rel="noopener">Anypoint MQ Stats API</a>​ エンドポイントの場合、制限は 200 トランザクション/分になります。</p>
</div>
</td>
</tr>
</tbody></table>

**要求と応答のサンプル:**

環境別の使用状況メトリクスを取得するには、次の ​`curl`​ コマンドを使用します。

```bash
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"
```

このコマンドでは、次のような出力が返されます。

```json
  {
    "timestamp": "2021-11-08T00:00Z",
    "apiRequestCount": 127,
    "messageReceiptCount": 11,
    "billableUnitCount": 11,
    "messageByteCount": 6148
  }
```

`apiRequestCount`​ では、指定した期間の Anypoint MQ サービスへの API 要求数が返されます。

Broker API へのすべての要求が月次クォータに含まれます。 要求には、メッセージの送信、受信、および肯定応答のほか、キューおよび交換に対するすべての操作が含まれます。

Anypoint MQ 請求についての詳細は、[使用量グラフの表示](https://docs.mulesoft.com/jp/mq/mq-usage)を参照してください。

<table><tbody><tr><td class="icon"><i class="fa icon-note" title="Note"></i></td><td class="content">Anypoint MQ では請求で ​<code>messageReceiptCount</code>​ と ​<code>billableUnitCount</code>​ は使用されないため、これらを安全に無視できます。 Anypoint MQ では ​<code>messageReceiptCount</code>​ を使用して、​<strong>[MQ Usage (MQ 使用量)]</strong>​ ページに表示するメッセージ単位が決定されます。​<code>billableUnitCount</code>​ は、​<code>messageReceiptCount</code>​ と同じ値に設定された、内部で使用する値です。</td></tr></tbody></table>

### [](#usage-by-org)組織別の使用状況メトリクスの取得

Stats API を使用して、ルートビジネス組織における Anypoint MQ の使用量を取得できます。

`/organizations/ORGANIZATION_ID?startDate=…​&endDate=…​&period=…​`

<table>
<tbody><tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="paragraph">
<p>Anypoint MQ Stats API では、
 <a href="https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7-23abe036327a.anypoint-platform/anypoint-mq-stats/minor/1.0/console/method/%23318/" target="_blank" rel="noopener"><code>/organizations/{ORGANIZATION_ID}</code>​</a>​ および
 <a href="https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7-23abe036327a.anypoint-platform/anypoint-mq-stats/minor/1.0/console/method/%23378/" target="_blank" rel="noopener"><code>/organizations/{ORGANIZATION_ID}/environments/{ENVIRONMENT_ID}</code>​</a>​ エンドポイントの統計情報の取得が 10 トランザクション/分 (TPM) に制限されます。</p>
</div>
<div class="paragraph">
<p>要求がこの制限を超えた場合、Anypoint MQ Stats API では HTTP 429 状況コードが返されます。</p>
</div>
<div class="paragraph">
<p>他のすべての  <a href="https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7-23abe036327a.anypoint-platform/anypoint-mq-stats/minor/1.0/console/summary/" target="_blank" rel="noopener">Anypoint MQ Stats API</a>​ エンドポイントの場合、制限は 200 トランザクション/分になります。</p>
</div>
</td>
</tr>
</tbody></table>

**要求と応答のサンプル:**

1 か月間の組織別の 1 日の使用状況メトリクスを取得するには、次の ​`curl`​ コマンドを使用します。

```bash
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"
```

このコマンドでは、次のような出力が返されます。

```json
  {
    "timestamp": "2023-10-31T00:00Z",
    "apiRequestCount": 1066,
    "messageReceiptCount": 194,
    "billableUnitCount": 194,
    "messageByteCount": 107048
  }
```

`apiRequestCount`​ では、指定した期間の Anypoint MQ サービスへの API 要求数が返されます。

Broker API へのすべての要求が月次クォータに含まれます。 要求には、メッセージの送信、受信、および肯定応答のほか、キューおよび交換に対するすべての操作が含まれます。

Anypoint MQ 請求についての詳細は、[使用量グラフの表示](https://docs.mulesoft.com/jp/mq/mq-usage)を参照してください。

<table><tbody><tr><td class="icon"><i class="fa icon-note" title="Note"></i></td><td class="content">Anypoint MQ では請求で ​<code>messageReceiptCount</code>​ と ​<code>billableUnitCount</code>​ は使用されないため、これらを安全に無視できます。 Anypoint MQ では ​<code>messageReceiptCount</code>​ を使用して、​<strong>[MQ Usage (MQ 使用量)]</strong>​ ページに表示するメッセージ単位が決定されます。​<code>billableUnitCount</code>​ は、​<code>messageReceiptCount</code>​ と同じ値に設定された、内部で使用する値です。</td></tr></tbody></table>

### [](#exstatapi)例: Anypoint MQ Stats API

<table><tbody><tr><td class="icon"><i class="fa icon-note" title="Note"></i></td><td class="content">Anypoint MQ Stats API にアクセスするには、最初に <a href="https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7-23abe036327a.anypoint-platform/access-management-api/" target="_blank" rel="noopener">アクセス管理 API</a>​ を使用して認証する必要があります。</td></tr></tbody></table>

次の統計が提供されます。

- `messagesVisible`
    
    キューから取得できるメッセージ数。
- `messagesSent`
    
    キューに追加されたメッセージ数。
- `messagesReceived`
    
    キューで受信したメッセージ数。
- `messagesAcked`
    
    肯定応答されたメッセージの数。​**\[Anypoint Platform\]**​ > ​**\[MQ\]**​ ユーザーインターフェースを使用して削除されたメッセージも含まれます。

2022 年 7 月 26 日から 7 月 28 日までの統計をリストする要求の例:

```bash
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"
```

このコマンドでは、次のような出力が返されます。

```json
{
  "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-を使用したキューおよびエクスチェンジの作成)Groovy を使用したキューおよびエクスチェンジの作成

プログラムでキューとエクスチェンジを作成する場合、Groovy などの言語を使用できます。

次の例は、作成するキューとエクスチェンジをリストする ​`cloudhub.properties`​ ファイル、およびプロパティファイルを参照するスクリプトファイルで構成されます。

### [](#date-format-日付形式)Date Format (日付形式)

Anypoint MQ では、Stats API の開始日と終了日を標準 ISO 8601 形式で指定できます。

例: `2018-10-23T13:00:00Z`

### [](#コマンドの起動)コマンドの起動

Anypoint Platform アカウントにアクセスするプロパティファイルを変更したら、このコマンドを使用してスクリプトファイルを起動します。

`groovy <program_name>.groovy`

### [](#プロパティファイルの設定)プロパティファイルの設定

次のプロパティファイルの例は、アクセスログイン情報、 組織 ID、環境 ID、領域 ID、 および作成するキューとエクスチェンジの名前を定義します。

```text
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」](https://docs.mulesoft.com/jp/mq/mq-faq#regions)​を参照してください。

### [](#スクリプトファイルの作成)スクリプトファイルの作成

次のスクリプトの例は、プロパティファイルにリストされるキューとエクスチェンジを作成します。

```groovy
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
        }
    }
}
```

## [](#expostbro)Postman、Studio、ブラウザーからの Anypoint MQ のテスト

この例では、Postman、Anypoint Studio、ブラウザーから Anypoint MQ をテストできます。

- [Postman](#postsetup)
- [Anypoint Studio](#studiosetup)
- [ブラウザー](#browsersetup)

### [](#postsetup)Postman のセットアップ

[Postman](https://www.getpostman.com/)​ アプリケーションは、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) コマンドから返されます。

```json
{
    "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 環境に追加してその後の要求を容易にできます。

### [](#studiosetup)API アクセス用の Studio のセットアップ

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]`​ に設定。
    
    1. **Package Explorer**​ ウィンドウでプロジェクト名を右クリックし、​**\[Run As (別のユーザーとして実行)\] > \[Mule Application (Mule アプリケーション)\]**​ をクリックします。
        
        コンソールメッセージが値 ​`DEPLOYED`​ で終わっていることを確認します。
    2. Postman で、新しいメッセージをパブリッシュします。

#### [](#browsersetup)ブラウザーを使用したアクセス

Studio で \[HTTP Listener (HTTP リスナー)\] をセットアップしたら、アドレス ​`0.0.0.0:8081`​ をブラウズします。ブラウザーに、Postman によって送信されたメッセージが表示されます。このメッセージは Anypoint MQ Connector が受信し、HTTP Connector がブラウザーに送信したメッセージです。

## [](#exchange-からの-anypoint-mq-api-のダウンロード)Exchange からの Anypoint MQ API のダウンロード

Exchange から Anypoint MQ API をダウンロードするには、​**\[Download (ダウンロード)\]**​ をクリックして RAML、OAS、または Mule 3 または Mule 4 のコネクタファイルの中からダウンロードする形式を選択します。

![Exchange での Anypoint MQ API のダウンロード](/mulesoft/current/ja-jp/mq/_images/mq-exchange-download.png)

## [](#関連情報)関連情報

- [Anypoint MQ FAQ](https://docs.mulesoft.com/jp/mq/mq-faq)
- [Anypoint Exchange の Anypoint MQ Admin API](https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7-23abe036327a.anypoint-platform/anypoint-mq-admin/)
- [Anypoint Exchange の Anypoint MQ Broker API](https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7-23abe036327a.anypoint-platform/anypoint-mq-broker/)
- [Anypoint Exchange の Anypoint MQ Stats API](https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7-23abe036327a.anypoint-platform/anypoint-mq-stats/)
- [メッセージエクスチェンジに対するルールを設定することによるメッセージの転送](https://docs.mulesoft.com/jp/mq/mq-routing-rules)