Mule メッセージ構造

Mule メッセージは、Mule アプリケーションのフロー内で処理されるときに、通常は外部ソースのメッセージコンテンツとメタデータのコンテナとして機能する、Mule イベントの一部です。

Mule イベントは不変であるため、Mule メッセージを変更するたびに新しいインスタンスが作成されます。メッセージを受信するフロー内の各プロセッサは、次の要素で構成される新しい Mule メッセージを返します。

  • メッセージ`payload`​。メッセージの本文が含まれます。たとえば、ファイルの内容、データベースのレコード、REST または Web サービス要求への応答が含まれます。

  • メッセージ`attributes`​。ペイロードに関連付けられたメタデータ。

mule message structure 82af1

Mule メッセージは、HTTP リスナが応答を受信したときや Scheduler コンポーネントがフローの実行をトリガしたときと同様に、Mule フロー内のメッセージソースがフローの開始をトリガしたときに Mule イベント​の一部として作成されます。

たとえば、Mule アプリケーションの HTTP リスナは応答を受信したときに、応答のコンテンツをそのペイロードとして含み、そのコンテンツに関連付けられたメタデータも含む Mule メッセージを使用して Mule イベントを作成します。フロー内のメッセージプロセッサ (コアコンポーネント、File Read 操作、HTTP Request 操作など) は、その設定に従って、Mule イベントに存在する Mule メッセージデータを取得、設定、処理できます。

Anypoint Studio では、DataSense Explorer​ にフローの特定ポイントでの Mule メッセージの構造が表示されます。

メッセージペイロード

メッセージペイロードには、メッセージのコンテンツまたは本文が含まれます。たとえは、ペイロードには HTTP 要求の結果、データベースコネクタの Select 操作で取得したレコードの内容、またはファイルコネクタや FTP コネクタへの Read 操作で取得したファイルの内容が含まれる可能性があります。

ペイロードのコンテンツは、フロー内を移動するにつれ、Mule フロー内のメッセージプロセッサによって設定、強化、新しい形式への変換、情報の抽出、または Mule イベント変数への保存と新規ペイロードの生成が行われたときに変更されます。

Mule メッセージのペイロードは、Mule Runtime 変数payload​ を使用する DataWeave 式で選択できます。

たとえば、https://jsonplaceholder.typicode.com/users​ の JSON コンテンツに対する HTTP 要求への応答の payload​ を表示するように設定された Logger コンポーネントでは、次の例のような JSON コンテンツが Studio コンソールに出力されます。

例: HTTP 応答ペイロード
[
  {
    "id": 1,
    "name": "Leanne Graham",
    "username": "Bret",
    "email": "Sincere@april.biz",
    "address": {
      "street": "Kulas Light",
      "city": "Gwenborough",
      "zipcode": "92998-3874",
      "geo": {
        "lat": "-37.3159",
        "lng": "81.1496"
      }
    }
  },
  {
    "id": 2,
    "name": "Ervin Howell",
    "username": "Antonette",
    "email": "Shanna@melissa.tv",
    "address": {
      "street": "Victor Plains",
      "city": "Wisokyburgh",
      "zipcode": "90566-7771",
      "geo": {
        "lat": "-43.9509",
        "lng": "-34.4618"
      }
    }
  }
]

単純な JSON ファイルに対する File Read 操作の出力の payload​ を表示するように設定された Logger コンポーネントでは、次の例のような JSON コンテンツが Studio コンソールに出力される可能性があります。

例: ファイルペイロード
{ "hello" : "world" }

フロー内の次のメッセージプロセッサは、このペイロードに対して、payload.'hello'​ を含むペイロード内の JSON オブジェクトの値を選択し、先行する JSON ペイロードを文字列 "world"​ で置き換えるアクションなどを実行できます。

属性

属性には、メッセージの本文 (またはペイロード) に関連付けられたメタデータが含まれます。メッセージの特定の属性は、そのメッセージに関連付けられたコネクタ (HTTP、FTP、ファイルなど) によって異なります。メタデータはコネクタによって受信または返されたヘッダーとプロパティ、およびコネクタまたはコアコンポーネント (Transform Message など) によって入力された他のメタデータで構成されます。

Mule メッセージの属性は、Mule Runtime 変数attributes​ を使用する DataWeave 式で選択できます。

たとえば、Logger コンポーネントを介して HTTP 応答メタデータを表示する attributes​ 変数を使用している場合、次の例のような HTTP 応答属性が Studio コンソールに出力されます。

例: HTTP 応答の属性
{
   Status Code=200
   Reason Phrase=OK
   Headers=[
      date=Sun, 20 Jan 2019 19:13:51 GMT
      content-type=text/html;
      charset=UTF-8
      transfer-encoding=chunked
      connection=keep-alive
      set-cookie=__cfduid=d03462713a0b2c57c8d2ad3bf311287041548011631;
      expires=Mon, 20-Jan-20 19:13:51 GMT;
      path=/;
      domain=.typicode.com;
      HttpOnly
      x-powered-by=Express
      vary=Origin, Accept-Encoding
      access-control-allow-credentials=true
      cache-control=public, max-age=14400
      last-modified=Tue, 15 Jan 2019 18:17:15 GMT
      via=1.1 vegur
      cf-cache-status=HIT
      expires=Sun, 20 Jan 2019 23:13:51 GMT
      expect-ct=max-age=604800,
      report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
      server=cloudflare
      cf-ray=49c3dc570c2f281c-SJC
   ]
}

この例は、Web ページ https://jsonplaceholder.typicode.com/users​ に対する HTTP Request 操作からの応答です。

各属性は、等号 (=​) で区切られたキー/値のペアになっています。属性の値にアクセスするには、そのキーを使用します。たとえば、フローでコネクタまたはコンポーネント (Logger など) を使用している場合、次の構文を使用して、読み込んでいる HTTP 応答やファイルの属性にアクセスできます。

  • attributes.'statusCode'​: ​200​ などの HTTP 状況コードを選択。

  • attributes.headers.'date'​: HTTP 応答のヘッダーから Sun, 20 Jan 2019 18:54:54 GMT​ を選択。

  • attributes.headers.'content-type'​: HTTP コンテンツタイプ application/json​ を選択。

attributes.headers."content-type"​ 内の引用符は、解析エラーを回避するために必要です。属性名で有効な識別子は、数字、文字、アンダースコアのみです。引用符がないと、名前は attributes.headers.content - type​ のように解析されます。

ファイルメタデータの場合、属性は異なります。たとえば、Logger コンポーネントを介してファイルメタデータを表示する attributes​ 変数を使用している場合、次の例のようなコンテンツが Studio コンソールに出力されます。

例: ファイルの属性
LocalFileAttributes[
  lastModifiedTime=2019-01-20T08:17:55,
  lastAccessTime=2019-01-20T10:54:55,
  creationTime=2019-01-20T08:17:55,
  size=22,
  regularFile=true,
  directory=false,
  symbolicLink=false,
  path=/Users/me/Desktop/myJson.json,
  fileName=myJson.json

各属性は、キー/値のペア (fileName=myJson.json​ など) になっています。属性の値を選択するには、次のようにそのキーを参照します。

  • attributes.'fileName'​: ファイルの名前 (myJson.json​) を返す。

  • attributes.size​: ファイルのサイズ (22​) を返す。

Was this article helpful?

💙 Thanks for your feedback!