Flex Gateway新着情報
Governance新着情報
Monitoring API Manager多くのインテグレーションでは、次のように特定の条件に応じて異なるサーバーへの接続が必要です。
請求書を発行する部署に応じて異なる請求書ストレージサーバーに接続する。
マルチテナントのユースケースなど、インテグレーションの対象に応じて異なるサーバーに接続する。
こうしたユースケースに対応するため、SFTP 用 Anypoint Connector (SFTP Connector) グローバル設定要素では、これらの条件を評価して適切なサーバーに接続するパラメーター式がサポートされています。
次の例は、複数のサーバーに動的に接続するための SFTP Connector の設定方法を示しています。
HTTP の [Listener (リスナー)] ソースでは、HTTP 経由で投稿されるランダムコンテンツを読み取ってフローを開始します。
File Connector の Read 操作では、host
、user
、port
などの列で構成されるランダムな SFTP 宛先セットを含む受信者 CSV ファイルを読み込みます。
DataWeave 変換は、コンテンツをマップして、CSV ファイルを分割します。
[For Each] コンポーネントと SFTP の Write 操作では、コンテンツを各 SFTP 宛先に書き込みます。
[For Each] の反復ごとに、SFTP グローバル設定要素で設定された式が異なる値に解決され、サーバーごとに異なる接続が確立されます。
この例をテストするには、Mule アプリケーションを作成して、curl コマンドを使用してアプリケーションを実行およびテストします。
Mule フローを作成する手順は、次のとおりです。
[Mule Palette (Mule パレット)] ビューで、[HTTP] > [Listener] を選択します。
[HTTP] の [Listener (リスナー)] を Studio キャンバスにドラッグします。
[HTTP Listener (HTTP リスナー)] 設定画面で、必要に応じて [Display Name (表示名)] 項目の値を変更します。
[Path (パス)] 項目を /multitenant
に設定します。
[Connector configuration (コネクタ設定)] 項目の横にあるプラス記号 (+) をクリックして、アプリケーション内の HTTP の Listener のすべてのインスタンスで使用できるグローバル要素を設定します。
[General (一般)] タブで、次の項目を設定します。
Host (ホスト): All Interfaces [0.0.0.0] (default)
Port (ポート): 8081
[OK] をクリックします。
[Set Variable] コンポーネントを [HTTP] の [Listener (リスナー)] ソースの右にドラッグします。
[Name (名前)] 項目を content
、[Value (値)] 項目を #[payload]
に設定します。
File Connector の [Read] 操作を [Set Variable] コンポーネントの右にドラッグします。
[File Path (ファイルパス)] 項目を recipients.csv
に設定します。
これにより、host
、user
、port
などの列で構成されるランダムな SFTP 宛先セットを含む CSV ファイルが読み取られます。
[Connector configuration (コネクタ設定)] 項目の横にあるプラス記号 (+) をクリックして、アプリケーション内の File Connector のすべてのインスタンスで使用できるグローバル要素を設定します。
デフォルト設定を受け入れ、[OK] をクリックします。
Read 操作の [MIME Type (MIME タイプ)] タブの [MIME Type (MIME タイプ)] 項目で application/csv
を選択します。
コンポーネントおよび操作を追加して、Mule アプリケーションの作成を続けます。
Studio で、[Transform Message] コンポーネントを [Read] 操作の右にドラッグします。
コンポーネントの [Output (出力)] セクションで、次の DataWeave コードを追加して、CSV ファイルの列にマップします。
%dw 2.0
output application/java
---
payload map using (row = $) {
host: row.Host,
user: row.User,
password: row.Password}
[For Each] コンポーネントを [Transform Message] コンポーネントの右にドラッグします。
SFTP の [Write] 操作を [For Each] コンポーネントにドラッグします。
For Each の反復ごとに、Write 操作は、コンテンツを各 SFTP 宛先に書き込みます。
[Connector configuration (コネクタ設定)] 項目の横にあるプラス記号 (+) をクリックして、アプリケーション内の SFTP の Write 操作のすべてのインスタンスで使用できるグローバル要素を設定し、次の項目を設定します。
Host (ホスト): #[payload.host]
Username (ユーザー名): #[payload.username]
Password (パスワード): #[payload.password]
[OK] をクリックします。
設定画面で、[Path (パス)] 項目を demo.txt
に設定します。
[Content (コンテンツ)] 項目を payload
に設定します。
[Set Payload] コンポーネントを [For Each] コンポーネントの右にドラッグします。
[Value (値)] 項目を Multicast Ok
に設定します。
Mule アプリケーションを作成したら、それを実行してテストします。
Studio で、Mule アプリケーションを保存します。
Package Explorer でプロジェクト名をクリックし、[Run (実行)] > [Run As (別のユーザーとして実行)] > [Mule Application (Mule アプリケーション)] をクリックします。
ブラウザーを開き、http://0.0.0.0:8081/multitenant
と入力します。
Mule 4 の動作に関する注意事項 (Mule 3 ユーザー向け):
HTTP Listener ソースを通じて投稿された情報は、各 SFTP サイトに複数回書き込まれます。
リスナーで反復可能ストリーム機能が使用されているため、ストリームを複数回コンシュームすることについて心配は無用です。
For Each コンポーネントは CSV ファイルの各行を自動的に処理します。
Mule 3 では、最初に CSV ファイルを Java 構造体に変換する必要がありましたが、Mule 4 は Java に依存しないため、変換せずに動作するようになりました。
ファイルを読み取る場合やリストする場合に、ファイルのメタデータ (たとえば、ファイル名、フルパス、サイズ、タイムスタンプ) を知りたいと考える場合もあります。コネクタは Mule メッセージ属性を使用してこの情報にアクセスします。
この例のフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:sftp="http://www.mulesoft.org/schema/mule/sftp" xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
xmlns:file="http://www.mulesoft.org/schema/mule/file"
xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
http://www.mulesoft.org/schema/mule/sftp http://www.mulesoft.org/schema/mule/sftp/current/mule-sftp.xsd">
<http:listener-config name="HTTP_Listener_config" >
<http:listener-connection host="0.0.0.0" port="8081" />
</http:listener-config>
<file:config name="File_Config" doc:name="File Config" />
<sftp:config name="SFTP_Config" doc:name="SFTP Config" >
<sftp:connection host="#[payload.host]" username="#[payload.user]" password="#[payload.password]" />
</sftp:config>
<flow name="SFTPexample" >
<http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/multitenant"/>
<set-variable value="#[payload]" doc:name="Set Variable" variableName="content"/>
<file:read doc:name="Read" config-ref="File_Config" path="recipients.csv" outputMimeType="application/csv"/>
<ee:transform doc:name="Transform Message" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
payload map using (row = $) {
host: row.Host,
user: row.User,
password: row.Password}]]></ee:set-payload>
</ee:message>
</ee:transform>
<foreach doc:name="For Each" >
<sftp:write doc:name="Write" config-ref="SFTP_Config" path="demo.txt">
</sftp:write>
</foreach>
<set-payload value="Multicast OK" doc:name="Set Payload" />
</flow>
</mule>