Nachrichtenfluss 'XML_FlightQueryIn' erstellen

Befolgen Sie die nachfolgenden Anweisungen, um den Nachrichtenfluss 'XML_FlightQueryIn' zu erstellen. Ausführlichere Anweisungen erhalten Sie jeweils über die Links am Ende eines jeden Schritts.

Vor Erstellung des Nachrichtenflusses 'XML_FlightQueryReply' müssen zunächst die Nachrichtenflüsse 'XML_FlightQueryOut' und 'XML_FlightQueryReply' erstellt werden. Eine Anleitung dazu finden Sie unter Nachrichtenfluss 'XML_FlightQueryOut' erstellen und Nachrichtenfluss 'XML_FlightQueryReply' erstellen.

So erstellen und konfigurieren Sie den Nachrichtenfluss 'XML_FlightQueryIn':

  1. Erstellen Sie einen Nachrichtenfluss namens 'XML_FlightQueryIn'.
    Die entsprechenden Anweisungen finden Sie in der WebSphere Message Broker-Dokumentation unter Nachrichtenflüsse erstellen.
  2. Fügen Sie im Nachrichtenflusseditor die in der folgenden Tabelle aufgelisteten Knoten hinzu, und benennen Sie diese um.
    Die entsprechenden Anweisungen finden Sie in der WebSphere Message Broker-Dokumentation unter Nachrichtenflussknoten hinzufügen.
    Palettenfächer Knotentyp Knotenname
    WebSphere MQ MQInput XML_FLIGHTQUERY_REPLIES
    WebSphere MQ MQOutput XML_FLIGHTQUERY_OUT
    WebSphere MQ MQOutput XML_FLIGHTQUERY_TIMEOUT
    WebSphere MQ MQOutput XML_FLIGHTQUERY_FAIL
    Transformation Compute BuildOutputMessage
    Transformation Compute ProcessTimeout
    Routing AggregateReply AggregateReplies
  3. Verbinden Sie die Knoten anhand der nachfolgenden Tabelle miteinander.
    Die entsprechenden Anweisungen finden Sie in der WebSphere Message Broker-Dokumentation unter Nachrichtenflussknoten verbinden.
    Überprüfen Sie anhand des Diagramms unter Informationen zum Nachrichtenfluss 'XML_FlightQueryIn', ob Sie die Knoten richtig miteinander verbunden haben.
    Knotenname Terminal Verbinden mit
    XML_FLIGHTQUERY_REPLIES Ausgangsterminal AggregateReplies (Eingangsterminal)
    Catch XML_FLIGHTQUERY_FAIL
    AggregateReplies Ausgangsterminal BuildOutputMessage
    Zeitlimit-Terminal ProcessTimeout
    BuildOutputMessage Ausgangsterminal XML_FLIGHTQUERY_OUT
    ProcessTimeout Ausgangsterminal XML_FLIGHTQUERY_TIMEOUT
  4. Konfigurieren Sie die Knoteneigenschaften anhand der nachfolgenden Tabelle. Übernehmen Sie die Standardwerte für die Eigenschaften, sofern die Tabelle keinen davon abweichenden Wert enthält.
    Anweisungen hierzu finden Sie in der Dokumentation von WebSphere Message Broker im Abschnitt Nachrichtenflussknoten konfigurieren.
    Knotenname Seite Eigenschaft Wert
    XML_FLIGHTQUERY_REPLIES Grundeinstellung Name der Warteschlange XML_FLIGHTQUERY_REPLIES
    (Dieser Wert gibt die Warteschlange an, in die der Nachrichtenfluss 'XML_FlightQueryOut' die Steuernachricht eingereiht hat.)
    Syntaxanalyse der Eingabenachricht Nachrichtendomäne XMLNSC: Für XML-Nachrichten (Berücksichtigung von Namensbereichen, Überprüfung, geringe Speicherbelegung)
    (Mit diesem Wert wird der Broker angewiesen, den generischen XML-Parser zu verwenden.)
    AggregateReplies Grundeinstellung Aggregationsname FLIGHTDETAILSAGG
    (Dieser Name muss mit der Eigenschaft 'Aggregate Name' des Knotens 'RequestDetails' im Nachrichtenfluss 'FlightQuery_Out' übereinstimmen.)
    Grundeinstellung Zeitlimit bei unbekannten Nachrichten 60
    (Dieser Wert gibt die Dauer an, während der Nachrichten, die nicht als Antworten identifizierbar sind, in der Warteschleife gehalten werden, bevor sie an das Unbekannt-Terminal weitergeleitet werden.)
    BuildOutputMessage Grundeinstellung ESQL-Modul BuildOutputMessage
    (Dieser Wert gibt den Namen des vom Knoten während der Verarbeitung verwendeten ESQL-Moduls an. Der Name muss dem Namen in der Anweisung CREATE COMPUTE MODULE in der ESQL-Datei entsprechen.)
    XML_FLIGHTQUERY_OUT Grundeinstellung Name der Warteschlange
    (Die Angabe des WS-Managernamens ist nicht erforderlich, da die Warteschlange in demselben WS-Manager wie der Broker definiert ist.)
    XML_FLIGHTQUERY_OUT
    (Dieser Wert gibt die lokale Warteschlange an, in die der Nachrichtenfluss die Nachricht einreiht.)
    ProcessTimeout Grundeinstellung ESQL-Modul ProcessTimeout
    (Dieser Wert gibt den Namen des vom Knoten während der Verarbeitung verwendeten ESQL-Moduls an. Der Name muss dem Namen in der Anweisung CREATE COMPUTE MODULE in der ESQL-Datei entsprechen.)
    XML_FLIGHTQUERY_TIMEOUT Grundeinstellung

    Name der Warteschlange
    (Die Angabe des WS-Managernamens ist nicht erforderlich, da die Warteschlange in demselben WS-Manager wie der Broker definiert ist.)

    XML_FLIGHTQUERY_TIMEOUT
    (Dieser Wert gibt die lokale Warteschlange an, in die der Nachrichtenfluss die unvollständige zusammengefasste Nachricht einreiht, wenn nicht alle Antwortnachrichten den Knoten 'AggregateReplies' erreichen, bevor das im Knoten 'RequestDetails' des Nachrichtenflusses 'XML_FlightQueryOut' angegebene Zeitlimit überschritten ist.
    XML_FLIGHTQUERY_FAIL Grundeinstellung Name der Warteschlange
    (Die Angabe des WS-Managernamens ist nicht erforderlich, da die Warteschlange in demselben WS-Manager wie der Broker definiert ist.)
    XML_FLIGHTQUERY_FAIL
    (Dieser Wert gibt die Warteschlange an, in die der Nachrichtenfluss die Nachricht einreiht, wenn die Verarbeitung fehlschlägt.)
  5. Klicken Sie im Projekt 'XML Airline Message Flows' doppelt auf die ESQL-Datei, um sie im ESQL-Editor zu öffnen. Kopieren Sie die im Folgenden wiedergegebenen ESQL-Code-Module in die ESQL-Datei und speichern Sie dann die Datei. Weitere Informationen hierzu finden Sie in der WebSphere Message Broker-Dokumentation unter ESQL erstellen.
    -- *********************************************************************************
    -- * ESQL for the XML_FlightQueryIn message flow - BuildOutputMessage/ProcessTimeout
    -- *********************************************************************************
    
    CREATE COMPUTE MODULE BuildOutputMessage
    	CREATE FUNCTION Main() RETURNS BOOLEAN
    	BEGIN
    		-- Aggregationsantwortnachricht für Ausgabe in eine Warteschlange korrigieren
    		SET OutputRoot.Properties = InputRoot.Properties;
    		CREATE NEXTSIBLING OF OutputRoot.Properties DOMAIN 'MQMD';
    		SET OutputRoot.MQMD.Version = MQMD_CURRENT_VERSION;
    
    		DECLARE inflight REFERENCE TO InputRoot.ComIbmAggregateReplyBody.FlightDetails.XMLNSC.Flight;
    		DECLARE inpass REFERENCE TO InputRoot.ComIbmAggregateReplyBody.PassengerDetails.XMLNSC.ListOfPassengers;
    		CREATE FIELD OutputRoot.XMLNSC.FlightDetailsInfoResponse;
    		DECLARE outresp REFERENCE TO OutputRoot.XMLNSC.FlightDetailsInfoResponse;
    
    		-- Ausgabenachricht mit Fluginformationen aus Aggregationsantwort füllen
    --		CREATE FIRSTCHILD OF outresp.Flight TYPE NameValue NAME 'number' VALUE inflight.FLIGHTNO;
    		SET outresp.Flight.(XMLNSC.Attribute)number VALUE = inflight.FLIGHTNO;
    		SET outresp.Flight.(XMLNSC.Attribute)Flightdate VALUE = inflight.FLIGHTDATE;
    		SET outresp.Flight.FirstClass.Capacity = inflight.TOTALFIRST;
    		SET outresp.Flight.FirstClass.Used = inflight.FIRSTCLASS;
    		SET outresp.Flight.FirstClass.Price = inflight.FIRSTPRICE;
    		SET outresp.Flight.EconomyClass.Capacity = inflight.TOTALECONOMIC;
    		SET outresp.Flight.EconomyClass.Used = inflight.ECONOMICCLASS;
    		SET outresp.Flight.EconomyClass.Price = inflight.ECONOMICPRICE;
    		SET outresp.Flight.Origin = inflight.STARTPOINT;
    		SET outresp.Flight.Destination = inflight.ENDPOINT;
    
    		-- Ausgabenachricht mit Passagierangaben aus Aggregationsnachricht füllen		
    		DECLARE I INTEGER 1;
    		DECLARE J INTEGER CARDINALITY(inpass.*[]);
    		WHILE I <= J DO
    			SET outresp.ListOfPassengers.Passenger[I].ReservationNumber = inpass.PassengerDetails[I].RESERVATIONNO;
    			SET outresp.ListOfPassengers.Passenger[I].FirstName = inpass.PassengerDetails[I].FIRSTNAME;
    			SET outresp.ListOfPassengers.Passenger[I].LastName = inpass.PassengerDetails[I].LASTNAME;
    			SET outresp.ListOfPassengers.Passenger[I].Class = inpass.PassengerDetails[I].CLASSTYPE;
    			SET I = I + 1;
    		END WHILE;
    	RETURN TRUE;
    	END;
    END MODULE;
    
    CREATE COMPUTE MODULE ProcessTimeout
    	CREATE FUNCTION Main() RETURNS BOOLEAN
    	BEGIN
    		SET OutputRoot.Properties = InputRoot.Properties;
    		CREATE NEXTSIBLING OF OutputRoot.Properties DOMAIN 'MQMD';
    		SET OutputRoot.MQMD.Version = MQMD_CURRENT_VERSION;
    		CREATE FIELD OutputRoot.XMLNSC.ComIbmAggregateReplyBody;
    		DECLARE timedout REFERENCE TO OutputRoot.XMLNSC.ComIbmAggregateReplyBody;
    		DECLARE reps REFERENCE TO InputRoot.ComIbmAggregateReplyBody;
    		MOVE reps FIRSTCHILD;
    		IF LASTMOVE(reps) THEN -- es gibt entweder eine oder keine Antwort
    			SET timedout.TimedOut = reps.XMLNSC;
    		END IF;
    		RETURN TRUE;
    	END;
    END MODULE;
    
  6. Speichern Sie den Nachrichtenfluss.
Sie haben den Nachrichtenfluss 'XML_FlightQueryIn' erstellt, der innerhalb des Mustercodes 'Aggregation' den Endpunkt des Nachrichtenflusses 'XML_FlightQuery' darstellt. Der Nachrichtenfluss 'XML_FlightQueryIn' fordert in Verbindung mit den Nachrichtenflüssen 'XML_FlightQueryOut' und 'XML_FlightQueryReply' Informationen zu einem bestimmten Flug und zu den Passagieren an, die für diesen Flug Sitzplätze reserviert haben.

Zurück zur Erstellung des Mustercodes 'Airline Reservations'