XML_FlightQueryIn 메시지 플로우를 작성하려면 다음 지시사항을 따르십시오. 자세한 정보는 각 단계의 끝에서 제공되는 링크를 누르십시오.
XML_FlightQueryReply 메시지 플로우를 작성하기 전에, XML_FlightQueryOut 및 XML_FlightQueryReply 메시지 플로우를 작성해야 합니다. 지시사항은 XML_FlightQueryOut 메시지 플로우 작성 및 XML_FlightQueryReply 메시지 플로우 작성을 참조하십시오.
XML_FlightQueryIn 메시지 플로우를 작성하고 구성하려면 다음을 수행하십시오.
노드 유형 | 노드 이름 |
---|---|
MQInput | XML_FLIGHTQUERY_REPLIES |
MQOutput | XML_FLIGHTQUERY_OUT |
MQOutput | XML_FLIGHTQUERY_TIMEOUT |
MQOutput | XML_FLIGHTQUERY_FAIL |
Compute | BuildOutputMessage |
Compute | ProcessTimeout |
AggregateReply | AggregateReplies |
노드 이름 | 터미널 | 연결할 대상 |
---|---|---|
XML_FLIGHTQUERY_REPLIES | Out | AggregateReplies(In 터미널) |
Catch | XML_FLIGHTQUERY_FAIL | |
AggregateReplies | Out | BuildOutputMessage |
Timeout | ProcessTimeout | |
BuildOutputMessage | Out | XML_FLIGHTQUERY_OUT |
ProcessTimeout | Out | XML_FLIGHTQUERY_TIMEOUT |
노드 이름 | 페이지 | 등록 정보 | 값 |
---|---|---|---|
XML_FLIGHTQUERY_REPLIES | 기본 | 큐 이름 | XML_FLIGHTQUERY_REPLIES (XML_FlightQueryOut에서 제어 메시지를 넣는 큐입니다.) |
디폴트 | 메시지 도메인 | XML (브로커에게 일반 XML 구문 분석기를 사용하도록 알려줍니다.) |
|
Aggregate Replies | 기본 | 집계 이름 | FLIGHTDETAILSAGG (이 이름은 FlightQuery_Out 메시지 플로우에 있는 Request details 노드의 집계 이름 등록 정보와 일치해야 합니다.) |
기본 | 알 수 없는 메시지 시간 종료 | 60 (Unknown 터미널로 전달되기 전에 응답으로 식별될 수 없는 메시지가 보류되는 시간의 길이입니다.) |
|
Build Output Message | 기본 | ESQL 모듈 | BuildOutputMessage (처리 중에 이 노드에서 사용하는 ESQL 모듈의 이름입니다. 이 이름은 ESQL 파일의 CREATE COMPUTE MODULE문에 있는 이름과 일치해야 합니다.) |
XML_FLIGHTQUERY_OUT | 기본 | 큐 이름 (큐가 브로커와 동일한 큐 관리자에 정의되어 있으므로 큐 관리자 이름을 지정할 필요가 없습니다.) |
XML_FLIGHTQUERY_OUT (메시지 플로우가 메시지를 넣는 로컬 큐입니다.) |
Process Timeout | 기본 | ESQL 모듈 | ProcessTimeout (처리 중에 이 노드에서 사용하는 ESQL 모듈의 이름입니다. 이 이름은 ESQL 파일의 CREATE COMPUTE MODULE문에 있는 이름과 일치해야 합니다.) |
XML_FLIGHTQUERY_TIMEOUT | 기본 | 큐 이름 |
XML_FLIGHTQUERY_TIMEOUT (모든 응답 메시지가 XML_FlightQueryOut 메시지 플로우의 Request Details 노드에 지정된 시간종료 이전에 Aggregate Replies 노드에 이르지 못할 경우, 메시지 플로우가 불완전한 집계 메시지를 넣는 로컬 큐입니다.) |
XML_FLIGHTQUERY_FAIL | 기본 | 큐 이름 (큐가 브로커와 동일한 큐 관리자에 정의되어 있으므로 큐 관리자 이름을 지정할 필요가 없습니다.) |
XML_FLIGHTQUERY_FAIL (처리에 실패할 경우 메시지 플로우가 메시지를 넣는 곳입니다.) |
-- ************************************************ -- * 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;
이제, XML_FlightQuery 메시지 플로우의 fan-in 부분을 집계하는 XML_FlightQueryIn 메시지 플로우가 작성되었습니다. XML_FlightQueryIn 메시지 플로우는 XML_FlightQueryOut 및 XML_FlightQueryReply 메시지 플로우에 작동하여 특정 항공기에 대한 정보 및 항공기에 좌석을 예약한 승객에 대한 정보를 요청합니다.