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. Anweisungen hierzu finden Sie unter Nachrichtenfluss 'XML_FlightQueryOut' erstellen und Nachrichtenfluss 'XML_FlightQueryReply' erstellen.
So erstellen und konfigurieren Sie den Nachrichtenfluss 'XML_FlightQueryIn':
Knotentyp | Knotenname |
---|---|
MQEmpfang | XML_FLIGHTQUERY_REPLIES |
MQSenden | XML_FLIGHTQUERY_OUT |
MQSenden | XML_FLIGHTQUERY_TIMEOUT |
MQSenden | XML_FLIGHTQUERY_FAIL |
Rechnen | BuildOutputMessage |
Rechnen | ProcessTimeout |
Knoten für Aggregationsantworten | AggregateReplies |
Knotenname | Terminal | Verbinden mit |
---|---|---|
XML_FLIGHTQUERY_REPLIES | Out | AggregateReplies (In-Terminal) |
Catch | XML_FLIGHTQUERY_FAIL | |
AggregateReplies | Out | BuildOutputMessage |
Timeout | ProcessTimeout | |
BuildOutputMessage | Out | XML_FLIGHTQUERY_OUT |
ProcessTimeout | Out | XML_FLIGHTQUERY_TIMEOUT |
Knotenname | Seite | Eigenschaft | Wert |
---|---|---|---|
XML_FLIGHTQUERY_REPLIES | Grundeinstellung | Name der Warteschlange | XML_FLIGHTQUERY_REPLIES (Die Warteschlange, in die der Nachrichtenfluss 'XML_FlightQueryOut' die Steuerungsnachricht eingereiht hat.) |
Default | Nachrichtendomäne | XML (Weist den Broker an, den generischen XML-Parser zu verwenden.) |
|
Aggregate Replies (Antworten kumulieren) | Grundeinstellung | Aggregationsname | FLIGHTDETAILSAGG (Dieser Name muss mit der Eigenschaft 'Aggregate Name' des Knotens 'Request Details' im Nachrichtenfluss 'FlightQuery_Out' übereinstimmen.) |
Grundeinstellung | Zeitlimit bei unbekannten Nachrichten | 60 (Dies ist die Zeit, während der Nachrichten, die nicht als Antworten identifizierbar sind, in der Warteschleife gehalten werden, bevor sie an das Unknown-Terminal weitergeleitet werden.) |
|
Build Output Message | Grundeinstellung | ESQL-Modul | BuildOutputMessage (Der Name des vom Knoten während der Verarbeitung verwendeten ESQL-Moduls. 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 (Die lokale Warteschlange, in die der Nachrichtenfluss die Nachricht einreiht.) |
Process Timeout | Grundeinstellung | ESQL-Modul | ProcessTimeout (Der Name des vom Knoten während der Verarbeitung verwendeten ESQL-Moduls. Der Name muss dem Namen in der Anweisung CREATE COMPUTE MODULE in der ESQL-Datei entsprechen.) |
XML_FLIGHTQUERY_TIMEOUT | Grundeinstellung | Name der Warteschlange |
XML_FLIGHTQUERY_TIMEOUT (Die lokale Warteschlange, in die der Nachrichtenfluss die unvollständige zusammengefasste Nachricht einreiht, wenn nicht alle Antwortnachrichten den Knoten 'Aggregate Replies' erreichen, bevor das im Knoten 'Request Details' 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 (In diese Warteschlange reiht der Nachrichtenfluss die Nachricht ein, wenn die Verarbeitung fehlschlägt.) |
-- ************************************************ -- * ESQL for the XML_FlightQueryIn message flow -- ************************************************ CREATE COMPUTE MODULE BuildOutputMessage CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN -- fix the aggregate reply message for output to a queue SET OutputRoot.Properties = InputRoot.Properties; CREATE NEXTSIBLING OF OutputRoot.Properties DOMAIN 'MQMD'; SET OutputRoot.MQMD.StrucId = MQMD_STRUC_ID; SET OutputRoot.MQMD.Version = MQMD_CURRENT_VERSION; DECLARE inflight REFERENCE TO InputRoot.ComIbmAggregateReplyBody.FlightDetails.XML.Flight; DECLARE inpass REFERENCE TO InputRoot.ComIbmAggregateReplyBody.PassengerDetails.XML.ListOfPassengers; CREATE FIELD OutputRoot.XML.FlightDetailsInfoResponse; DECLARE outresp REFERENCE TO OutputRoot.XML.FlightDetailsInfoResponse; -- populate the output message with flight info from the aggregate reply CREATE FIRSTCHILD OF outresp.Flight TYPE NameValue NAME 'number' VALUE inflight.FLIGHTNO; SET outresp.Flight.(XML.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; -- populate the output message with passenger info from the aggregate reply 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.StrucId = MQMD_STRUC_ID; SET OutputRoot.MQMD.Version = MQMD_CURRENT_VERSION; CREATE FIELD OutputRoot.XML.ComIbmAggregateReplyBody; DECLARE timedout REFERENCE TO OutputRoot.XML.ComIbmAggregateReplyBody; DECLARE reps REFERENCE TO InputRoot.ComIbmAggregateReplyBody; MOVE reps FIRSTCHILD; IF LASTMOVE(reps) THEN -- there will either be one reply, or none SET timedout.TimedOut = reps.XML; END IF; RETURN TRUE; END; END MODULE;
Nun haben Sie den Nachrichtenfluss 'XML_FlightQueryIn' erstellt, der innerhalb des Aggregationsbeispiels 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 auf diesem Flug Sitzplätze reserviert haben.