Mustercode 'Managed File Transfer' erweitern

Bevor Sie den Mustercode 'Managed File Transfer' erweitern können, müssen Sie eine der folgenden Aufgaben ausgeführt haben:

Nachdem Sie den Mustercode importiert oder erstellt haben, kann er wie folgt erweitert werden:

Sollten bei der Ausführung des Mustercodes Probleme auftreten, lesen Sie den Abschnitt Umgebung für WebSphere MQ File Transfer Edition-Knoten vorbereiten oder den Abschnitt Probleme beim Ausführen von Mustercodes beheben in der Dokumentation zu WebSphere Message Broker.

Mehrere Filialen verarbeiten

Der Mustercode führt die Verarbeitung für eine Filiale durch. Sie können den Mustercode erweitern, sodass eine Verarbeitung für mehrere Filialen im Nachrichtenfluss 'FTEInputBranch2HQMFlow' möglich ist, indem Sie die FTEInput-Knotenfilter ändern. Mit der Filterfunktion kann der FTEInput-Knoten die Nachrichten auswählen, die verarbeitet werden sollen. Beispiel:

Darüber hinaus müssen Sie für jede zusätzliche Filiale einen Agenten simulieren. In dem Musterszenario wird mithilfe des Clients .mbtest das Senden einer Anforderungsnachricht für eine Warenbestellung von einer Filiale aus simuliert. Damit festgestellt werden kann, von welcher Filiale die Nachricht stammt, wird im Headerfeld, das den Ursprung der Anwendung angibt, die Nummer der Filiale eingegeben. Anschließend wird mithilfe des Headers der Dateiname gesetzt, indem in der lokalen Umgebung der Platzhaltervergleich konfiguriert wird.

Damit der Mustercode die Verarbeitung für mehrere Filialen im Nachrichtenfluss 'FTEOutputHQ2BranchMFlow' übernehmen kann, müssen Sie die folgenden FTEOutput-Knoteneigenschaften ändern:

  1. Setzen Sie in der lokalen Umgebung das Feld Zielverzeichnis und/oder Agent name (Agentenname), damit die Nachrichten an die richtige Filiale gesendet werden können (siehe FTE-Metadaten).

  2. Fügen Sie in 'FTEOutputHQ2BranchMFlow' einen 'Resequence'-Knoten ein (siehe Zusätzliche Nachrichtenflussinstanzen verwenden.

Der Mustercode kann nun Dateien von mehreren Filialen mit lokalen und fernen Agenten verarbeiten.

Zusätzliche Nachrichtenflussinstanzen verwenden

Wird der Mustercode für das Einzelhandelsszenario erweitert, sodass eine Verarbeitung für mehrere Filialen möglich ist, werden die Flussinstanzen normalerweise so konfiguriert, dass eine Verwendung zusätzlicher Instanzen möglich ist, um so die Leistung zu optimieren.

Beim Einsatz zusätzlicher Instanzen erhält und verarbeitet die Warenbestandsanwendung Nachrichten aus verschiedenen Filialen; dabei kommt die Reihenfolge der empfangenen Daten durcheinander. Der Nachrichtenfluss, der den FTEOutput-Knoten verwendet, kann jederzeit Dateien mehrerer Filialen öffnen und verarbeiten und die Dateien gleichzeitig erstellen.

Bei einer Verarbeitung mit mehreren Flüssen werden die Daten von der Warenbestandsanwendung nicht unbedingt in der Reihenfolge ausgegeben, in der sie empfangen wurden. Daher muss der Datensatz 'End of Data' von jeder Filiale zuletzt eingehen, damit die Datei erst geschlossen wird, nachdem sie vollständig empfangen wurde. Die Reihenfolge der Produktdaten ist im XML-Format, die Reihenfolge ist daher beliebig.

Im folgenden Diagramm werden zwei Lösungsansätze für diese Problematik veranschaulicht. Im oberen Nachrichtenfluss wird dem FTEOutput-Knoten ein 'Resequence'-Knoten vorangestellt. Der 'Resequence'-Knoten gibt die Reihenfolge vor, in der die von einer Filiale gesendeten eingehenden Nachrichten durch den Knoten geleitet werden; die Reihenfolge ergibt sich aus der Folgenummer, die in die einzelnen Datensätze eingefügt wurde. Damit die Integrität der Produktdaten einer Filiale gewahrt ist, wird ein Nachrichtengruppentag (beispielsweise der Name der Filiale) eingefügt; damit wird sichergestellt, dass der 'Resequence'-Knoten nur die Produkte für diese Zielfiliale zusammenstellt. Für den 'Resequence'-Knoten ist es allerdings erforderlich, dass Nachrichten von ein und derselben Filiale (Folgegruppe) nur in einem einzigen Thread verarbeitet werden dürfen. Dieses Szenario steht allerdings im Widerspruch zu der ursprünglichen Notwendigkeit, mehrere Instanzen einzusetzen. Die korrekte Reihenfolge wird also nur auf Kosten einer Verarbeitung mit mehreren Flussinstanzen erreicht.

Wird der Nachrichtenfluss wie der untere Nachrichtenfluss im Diagramm übergearbeitet, kann dieses Problem gelöst werden. Hier wird der 'Resequence'-Knoten hinter den FTEOutput-Knoten gesetzt.

Re-sequenceFTEOuput

Der Fluss kann jetzt im Multithread-Modus arbeiten, wobei die Produktdaten in der Reihenfolge geschrieben werden, in der sie im Eingabeterminal eintreffen. Die Ausgabe vom FTEOutput-Knoten wird von einem 'Resequence'-Knoten erfasst, der die Datensätze erst weitergibt, nachdem der letzte Datensatz eingegangen ist. Der End-Of-Data-Datensatz wird direkt an den 'Resequence'-Knoten gesendet; der Knoten gibt den Datensatz erst weiter, wenn die Datensätze für eine Filiale vollständig sind. Der 'Filter'-Knoten löscht die Datensätze und sendet lediglich den End-Of-Data-Datensatz an den FTEOutput-Knoten. Der FTEOutput-Knoten kann die Datei nun schließen und den Agenten aufrufen, damit die Datei übertragen wird.

Entsprechend diesem Konzept kann der FTEOutput-Knoten in Flüssen mit mehreren Instanzen arbeiten und dabei die Integrität der Daten für eine bestimmte Datei bewahren.

WMQFTE-Integration

Im Basismustercode wird der temporäre Broker-FTE-Agent verwendet. Ausführliche Informationen zur Verwendung der fernen WMQFTE-Agenten zusammen mit dem Brokeragenten sowie Hinweise, wie mithilfe der Message Broker Explorer Tools eine Übertragung erstellt und der Fortschritt der Übertragung überprüft werden kann, finden Sie im Abschnitt Dieser Link wird in einem neuen Fenster geöffnet Willkommen bei WebSphere MQ File Transfer Edition.

WMQFTE

FTE-Metadaten

Der Mustercode enthält im Branch2HQDriver-ESQL-Code kommentierte Codefragmente und Beschreibungen. Beispiel:

-- Wenn Sie den FTEInput-Knoten verwenden, speichert er Informationen, die Sie in der Nachrichtenbaumstruktur    'LocalEnvironment.FTE' und
-- 'LocalEnvironment.FTE.Transfer' abrufen können. Die Nachrichtenbaumstruktur 'LocalEnvironment.FTE' speichert Informationen zum
-- aktuellen Datensatz und wird vom Broker aufegfüllt. Die Nachrichtenbaumstruktur 'LocalEnvironment.FTE.Transfer' enthält
-- von WebSphere® MQ File Transfer Edition empfangene Informationen zur Datei
		
--LocalEnvironment.FTE.TimeStamp (ZEICHEN)
--LocalEnvironment.FTE.Offset (INTEGER)
--LocalEnvironment.FTE.Record (INTEGER)
--LocalEnvironment.FTE.Delimiter (ZEICHEN)
--LocalEnvironment.FTE.Transfer.Directory (ZEICHEN)

Informationen zu FTE-Metadaten finden Sie im Abschnitt Gesteuerte Dateiübertragungen mithilfe von WebSphere MQ File Transfer Edition in der Dokumentation zu WebSphere Message Broker.

Anforderung/Antwort

Der Basismustercode basiert auf dem Anforderung/Antwort-Model. Dabei werden Anforderung und Antwort im Mustercode anhand der Nummer der Filiale aus der XML-Nachricht und aus dem MQMD-Header korreliert. In diesem Abschnitt wird die Anforderung/Antwort-Korrelation anhand der Übertragungs-ID und des Jobnamens beschrieben.

Wenn ein FTE-Agent eine Nachricht überträgt, füllt er die lokale Umgebung mit Informationen zu dieser Übertragung. Diese Informationen können überschrieben werden (siehe FTE-Metadata) oder sie können direkt zum Korrelieren der Nachrichten verwendet werden, damit sichergestellt ist, dass die Nachrichten an den richtigen FTE-Agenten zurückgesendet werden. Diese Informationen können Sie in den Übertragungseigenschaften in der Ansicht der WebSphere Message Broker Explorer-Tool sehen; Beispiel:

# 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>

Zurück zum Beginn des Mustercodes