FTP サーバーへの動的な接続の例 - Mule 4

多くのインテグレーションでは、次のように特定の条件に応じて異なるサーバーへの接続が必要です。

  • 請求書を送信する部署に応じて異なる請求書ストレージサーバーに接続する。

  • マルチテナントのユースケースなど、インテグレーションの対象に応じて異なるサーバーに接続する。

こうしたユースケースに対応するため、​config​ 要素では、これらの条件を評価して適切なサーバーに接続するパラメーター式がサポートされています。

次の例は、以下に該当する動的マルチキャストアプリケーションの例を示しています。

  • host​、​username​、​password​ が式になっているコネクタの設定を定義する。

  • HTTP 経由でコンテンツを投稿するフロー (​HTTP Listener​ によってトリガーされる) を記述する。

  • File Connector の ​Read​ 操作を使用して、​host​、​user​、​port​ などの列で構成される FTP 宛先セットを含む ​recipients.csv​ ファイルを読み込む。

  • [For Each]​ コンポーネントと FTP の ​Write​ 操作を使用して、コンテンツを各 FTP 宛先に書き込む。​[For Each]​ の反復ごとに、FTP グローバル設定要素で設定された式が異なる値に解決され、サーバーごとに異なる接続が確立されます。

この例をテストするには、Mule アプリケーションを作成して、curl コマンドを使用して実行します。

Studio キャンバスでの FTP サーバーの動的な接続フロー

Mule アプリケーションの作成

Mule アプリケーションフローを作成する手順は、次のとおりです。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[HTTP] > [Listener]​ を選択します。

  2. [HTTP] の [Listener]​ を Studio キャンバスにドラッグします。

  3. [HTTP Listener (HTTP リスナー)]​ 設定画面で、必要に応じて ​[Display Name (表示名)]​ 項目の値を変更します。

  4. [Path (パス)]​ を ​/multitenant​ に設定します。

  5. [Connector configuration (コネクタ設定)]​ 項目の横にあるプラス記号 (​+​) をクリックして、アプリケーション内の HTTP Listener のすべてのインスタンスで使用できるグローバル要素を設定します。

  6. [General (一般)]​ タブで、次の項目を設定します。

    • Host (ホスト)​: All Interfaces [0.0.0.0] (default)

    • Port (ポート)​: 8081

  7. [OK]​ をクリックします。

  8. [Set Variable]​ コンポーネントを ​[HTTP] の [Listener (リスナー)]​ ソースの右にドラッグします。

  9. [Name (名前)]​ を ​content​ に、​[Value (値)]​ を ​#[payload]​ に設定します。

  10. File Connector の ​[Read]​ 操作を ​[Set Variable]​ コンポーネントの右にドラッグします。

  11. [File Path (ファイルパス)]​ を ​recipients.csv​ に設定します。これにより、​host​、​user​、​port​ などの列で構成されるランダムな FTP 宛先セットを含む CSV ファイルが読み取られます。

  12. [Connector configuration (コネクタ設定)]​ 項目の横にあるプラス記号 (​+​) をクリックして、アプリケーション内の File Connector のすべてのインスタンスで使用できるグローバル要素を設定します。

  13. デフォルト設定を受け入れ、​[OK]​ をクリックします。

  14. Read​ 操作の ​[MIME Type (MIME タイプ)]​ タブの ​[MIME Type (MIME タイプ)]​ で ​[application/csv]​ を選択します。

  15. Studio で、​[Transform Message]​ コンポーネントを ​[Read]​ 操作の右にドラッグします。

  16. コンポーネントの ​[Output (出力)]​ セクションで、次の DataWeave コードを追加して、CSV ファイルの列にマップします。

    DataWeave スクリプト:
    %dw 2.0
    output application/java
    ---
    payload map using (row = $) {
       host: row.Host,
       user: row.User,
       password: row.Password}
    dataweave
  17. [For Each]​ コンポーネントを ​[Transform Message]​ コンポーネントの右にドラッグします。

  18. FTP の ​[Write]​ 操作を ​[For Each]​ コンポーネントにドラッグします。
    For Each の反復ごとに、​Write​ 操作は、コンテンツを各 FTP 宛先に書き込みます。

  19. [Connector configuration (コネクタ設定)]​ 項目の横にあるプラス記号 (​+​) をクリックして、アプリケーション内の FTP の ​Write​ 操作のすべてのインスタンスで使用できるグローバル要素を設定し、次の項目を設定します。

    • Host (ホスト)​: #[payload.host]

    • Username (ユーザー名)​: #[payload.username]

    • Password (パスワード)​: #[payload.password]

  20. [OK]​ をクリックします。

  21. [Path (パス)]​ を ​demo.txt​ に設定します。

  22. [Content (コンテンツ)]​ 項目を ​payload​ に設定します。

  23. [Set Payload]​ コンポーネントを ​[For Each]​ コンポーネントの右にドラッグします。

  24. [Value (値)]​ 項目を ​Multicast Ok​ に設定します。

Mule アプリケーションの実行およびテスト

Mule アプリケーションを作成したら、それを実行してテストします。

  1. Studio で、Mule アプリケーションを保存します。

  2. Package Explorer​ でプロジェクト名をクリックし、​[Run (実行)]​ > ​[Run As (別のユーザーとして実行)]​ > ​[Mule Application (Mule アプリケーション)]​ をクリックします。

  3. ブラウザーを開き、​http://0.0.0.0:8081/multitenant​ と入力します。

Mule 4 の動作に関する注意事項 (Mule 3 ユーザー向け):

  • HTTP Listener ソースを通じて投稿された情報は各 FTP サイトに複数回書き込まれますが、Mule 4 の反復可能ストリーム機能によってストリームの複数回のコンシュームによるオーバーヘッドが防止されます。

  • Mule 4 では、For Each コンポーネントは最初に Java 構造に変換することなく、CSV ファイルの各行を自動的に処理します。

    Mule 3 では、最初に CSV ファイルを Java 構造に変換する必要がありました。ただし、Mule 4 は Java に依存しないため、変換せずに動作するようになりました。

ファイルを読み取る場合やリストする場合に、ファイルのメタデータ (たとえば、ファイル名、フルパス、サイズ、タイムスタンプ) を知りたいと考える場合もあります。コネクタは Mule メッセージ属性を使用してこの情報にアクセスします。

FTP サーバーに動的に接続するための XML

この例のフローをすばやく Mule アプリケーションに読み込むには、Studio キャンバスで次のコードを ​[Configuration XML (設定 XML)]​ タブに貼り付けます。