Managed File Transfer サンプルを拡張する前に、以下のいずれかのタスクを実行しておく必要があります。
このサンプルのインポートまたは作成が完了したら、そのサンプルを拡張できます。
サンプルの実行時に問題が生じた場合は、WebSphere Message Broker 資料の WebSphere MQ File Transfer Edition ノードの環境の準備または、サンプル実行時の問題の解決を参照してください。
サンプルでは、1 つの支店を扱います。このサンプルを拡張して、FTEInputBranch2HQMFlow メッセージ・フローで複数の支店を処理できるようにする場合は、FTEInput ノードのフィルターを変更します。フィルター操作を使用することによって、FTEInput ノードでどのメッセージを取り出して処理するかを選択することが可能になります。以下に例を示します。
ディレクトリーの場所に基づくフィルターを使用する場合は、「ディレクトリー・フィルター」フィールドで、支店エージェントがメッセージを転送する宛先のディレクトリーを参照先として設定します。
また、すべての追加支店に対してエージェントをシミュレートする必要もあります。サンプル・シナリオでは、.mbtest クライアントを使用して、支店から在庫補充要求メッセージを送信する操作をシミュレートしています。メッセージの送信元の支店を示すために、アプリケーション・オリジン・データ・ヘッダー・フィールドには、支店番号が入力されています。 さらに、ヘッダーを使用して、ローカル環境で一致するワイルドカードを設定することによって、ファイル名を設定します。
このサンプルを拡張して、FTEOutputHQ2BranchMFlow メッセージ・フローで複数の支店を操作できるようにする場合は、FTEOutput ノードの以下のプロパティーを変更します。
ローカル環境で「宛先ディレクトリー」と「エージェント名」のいずれかまたは両方を設定し、メッセージの送付先として正しい支店を指定します。『FTEメタデータ』を参照してください。
これで、サンプルは、ローカルおよびリモート・エージェントを使用して複数の支店からのファイルを処理できるようになりました。
サンプルの小売りシナリオが拡張されて、複数の支店を処理できるようになると、一般にフロー・インスタンスは、スループットを改善するために、追加のインスタンスを処理するように設定されます。
追加のインスタンスを使用することによって、在庫アプリケーションは、各所の支店からのメッセージを受信および処理し、 受信されたデータの順序付けを混合します。 FTEOutput ノードを使用するメッセージ・フローは、多数の支店のファイルを同時に開いて処理し、それらのファイルを作成する処理を同時に開始する可能性があります。
マルチ・フロー処理では、在庫アプリケーションによるデータ出力の順序が受信と同じ順序になるとは限りません。重要なのは、どの支店についてもデータ終了レコードを最後に受信し、完了時にのみファイルを閉じるようにする、ということです。 製品データの順序は、XML 形式なので、どんな順序で書き込んでもかまいません。
下の図は、この問題に対する 2 つのアプローチを示しています。 上部のフローでは、Resequence ノードが FTEOutput ノードの前に配置されています。Resequence ノードは、レコードごとに挿入されているシーケンス番号に基づいて、支店の着信メッセージがそのノードを伝搬する順序を制御します。支店の製品データの完全性を確保するために、メッセージ・グループ・タグ (支店名など) を挿入して、Resequence ノードがその宛先支店の製品だけを集めるようにします。ただし、Resequence ノードでは、同じ支店 (シーケンス・グループ) に属するメッセージを 1 つのスレッドだけで処理することが必要です。 このシナリオは、マルチ・インスタンス操作に関する本来の要件に反します。 つまり、正しい順序付けを達成するために、マルチ・インスタンス・フロー操作が犠牲になっている、ということです。
メッセージ・フローを下部のフローのように再設計すると、この矛盾を解消できます。ここでは、Resequence ノードが FTEOutput ノードの後に配置されています。
このフローは、これにより、製品データが入力ターミナルに到着するとそれを書き込んで、マルチスレッド・モードで作動できるようになりました。 FTEOutput ノードからの出力は、Resequence ノードによって取り込まれます。Resequence ノードは、常に最終レコードを受信するまで待ってからレコードを伝搬します。 データ終了レコードは、Resequence ノードに直接送信されます。その時点でそのノードがそのレコードを伝搬するのは、そのノードが支店の一連のレコードをすべて受信していた場合に限られます。Filter ノードは、データ・レコードを破棄し、データ終了レコードだけを FTEOutput ノードに送信します。その時点で、FTEOutput ノードは、ファイルを閉じ、エージェントを呼び出してファイルを転送できるようになります。
この設計によって、FTEOutput ノードは、追加のインスタンスを組み込んだフローで動作し、特定のファイルを対象とするデータの保全性を維持することが可能になります。
基本サンプルは、一時ブローカー FTE エージェントを使用します。WMQFTE リモート・エージェントとブローカー・エージェントを併用する方法、および Message Broker Explorer ツールを使用して転送を作成したり転送の進行状況を確認したりする方法の詳細については、『
WebSphere MQ File Transfer Edition へようこそ』を参照してください。
サンプルには Branch2HQDriver ESQL コードのコメント化されたコード・スニペットおよび説明が含まれています。以下に例を示します。
-- When you use the FTEInput node, it stores information that you can access in the LocalEnvironment.FTE and -- LocalEnvironment.FTE.Transfer message trees. The LocalEnvironment.FTE message tree stores information relating -- to the current record and is populated by the broker. The LocalEnvironment.FTE.Transfer message tree contains -- information received from WebSphere® MQ File Transfer Edition regarding the file --LocalEnvironment.FTE.TimeStamp (CHARACTER) --LocalEnvironment.FTE.Offset (INTEGER) --LocalEnvironment.FTE.Record (INTEGER) --LocalEnvironment.FTE.Delimiter (CHARACTER) --LocalEnvironment.FTE.Transfer.Directory (CHARACTER)
FTE メタデータの詳細については、WebSphere Message Broker 資料の『WebSphere MQ File Transfer Edition を使用する、管理されたファイル転送』を参照してください。
基本サンプルは、要求/応答モデルを示しています。このサンプルでは、XML メッセージと MQMD から取得した支店番号を使用して、要求/応答の相関関係を確認します。このセクションでは、転送 ID とジョブ名を使用して、要求/応答の相関関係を確認する方法を重点的に取り上げます。
FTE エージェントは、メッセージを転送するときに、転送に関する情報をローカル環境に取り込みます。その情報を上書きすることも可能です。『FTE メタデータ』を参照してください。あるいは、その情報をそのまま使用して、各メッセージの相関関係を確認し、すべてのメッセージが正しい FTE エージェントに送り返されるようにすることもできます。WebSphere Message Broker Explorer ツール・ビューからの転送のプロパティーでこの情報を確認することができます。例えば次のようになります。
# STARTING <?xml version="1.0" encoding="UTF-8"?> <transaction xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ID="414d51204d4237514d47522020202020bb73ea4b20046302" agentRole="sourceAgent" version="3.00" xsi:noNamespaceSchemaLocation="TransferLog.xsd"> <action time="2010-05-12T11:34:12.421Z">started</action> <sourceAgent QMgr="MB8QMGR" agent="MB8BROKER.FTEBRANCH123"> <systemInfo architecture="x86" name="Windows XP" version="5.1 build 2600 Service Pack 3"/> </sourceAgent> <destinationAgent QMgr="MB8QMGR" agent="MB8BROKER.FTEHQ"/> <originator> <hostName>IBM-27BDFF76CFB</hostName> <userID>SYSTEM</userID> <mqmdUserID>SYSTEM</mqmdUserID> </originator> <transferSet bytesSent="0" startTime="2010-05-12T11:34:12.421Z" total="1"> <metaDataSet> <metaData key="com.ibm.wmqfte.TransferId">414d51204d4237514d47522020202020bb73ea4b20046302</metaData> <metaData key="com.ibm.wmqfte.MqmdUser">SYSTEM</metaData> <metaData key="com.ibm.wmqfte.DestinationAgent">MB8BROKER.FTEHQ</metaData> <metaData key="com.ibm.wmqfte.OriginatingHost">IBM-27BDFF76CFB</metaData> <metaData key="com.ibm.wmqfte.OriginatingUser">SYSTEM</metaData> <metaData key="com.ibm.wmqfte.JobName">Branch123</metaData> <metaData key="com.ibm.wmqfte.SourceAgent">MB8BROKER.FTEBRANCH123</metaData> </metaDataSet> </transferSet> <job> <name>Branch123</name> </job> </transaction>