Large Messaging 샘플 정보

Large Messaging 샘플은 판매 데이터의 마감일 처리 시나리오를 기본으로 하는 메시지 플로우 샘플 응용프로그램입니다. 날짜별로 판매 세부사항을 기록하는 메시지는 IT 센터로 전송하기 위해 상점에서 함께 배치 처리됩니다. IT 센터에서 메시지를 수신하면 배치 처리된 메시지는 다시 후속 처리를 위해 연결되는 여러 부분으로 분할됩니다. 이 분할은 WebSphere Message Broker 메시지 플로우를 사용하여 수행합니다. 판매를 나타내는 각 메시지의 구조는 동일합니다.

이 샘플에 있는 입력 및 출력 메시지는 간편성을 위해 자체 정의 XML 메시지로서 구현됩니다. 기타 메시지 형식도 쉽게 사용될 수 있습니다.

각각의 입력 메시지는 세 부분으로 구성됩니다.

SaleList 구조는 복잡한 구조입니다. 이 구조에는 다음 내용이 들어 있습니다.

이 샘플에서의 처리 목적은 전체적인 메모리 요구사항을 최소화하면서 개별적인 WebSphere MQ 메시지로서 SaleList 구조의 인스턴스를 작성하기 위한 것입니다. 이미 처리된 메시지 트리 부분은 삭제하여 가상 메모리 사용을 최소화합니다. 이 메시지 트리가 없으면 SaleList 구조의 각 인스턴스를 처리할 때마다 메시지 트리가 계속해서 커집니다.  

메시지를 하우스키핑하지 않아 메시지가 계속해서 커지면 메시지 플로우가 실행 중인 실행 그룹의 가상 메모리 요구사항이 매우 커지게 됩니다. 크기가 수 메가바이트인 입력 메시지는 상당한 성능상의 문제점이 될 수 있으며, 입력 메시지의 크기에 따라 수백의 메가바이트 또는 심지어 기가바이트의 가상 메모리 요구사항이 될 수도 있습니다.

샘플의 메모리 절약 기술에서는 변경이 용이한 메시지 트리를 사용해야 합니다. 이는 메시지 트리 일부가 삭제될 수 있는 트리입니다. InputRoot의 메시지 트리는 변경할 수 없으므로 필요할 때마다 트리에서 항목을 삭제할 수 없습니다. 그러므로 메시지 플로우에서 다른 트리가 작성됩니다. 이는 ESQL ROW 변수 및 ESQL CREATE 함수 호출을 사용하여 설정됩니다. 

샘플 처리는 하나의 메시지 플로우로 구성됩니다. 아래에서는 메시지 플로우가 수행하는 처리에 대해 설명합니다.

Large Messaging 메시지 플로우

Large Messaging 메시지 플로우는 다음 처리를 수행합니다.

  1. 트랜잭션 제어 하에 XML 페이로드(payload)가 들어 있는 WebSphere MQ 메시지를 읽습니다.
  2. SaleList 구조의 각 인스턴스에 대한 WebSphere MQ 메시지를 형식화합니다.
  3. WebSphere MQ 메시지를 출력 큐로 씁니다.
  4. 최종 요소가 처리되면 처리 완료를 알리는 WebSphere MQ 메시지를 생성합니다.

Large Messaging 메시지 플로우 다음 노드로 구성됩니다.

MQInput 노드 MessageWithRepeatingElements는 XML 페이로드(payload)가 들어 있는 WebSphere MQ 메시지를 읽습니다. 수신되는 메시지가 자체 정의 XML 형식으로 되어 있으므로 메시지 세트를 지정하거나 성공적으로 구문 분석되도록 형식화할 필요가 없습니다.

Compute 노드 ProduceMessageSlicesFromRepeatingElements에는 메시지 플로우에 대한 대부분의 처리가 포함되어 있습니다. 다음 처리를 수행합니다.

  1. InputRoot.XML 사본이 될 변경이 용이한 트리를 작성합니다. (InputRoot의 메시지 트리는 변경할 수 없습니다.) 메시지 플로우의 전체 메모리 요구사항을 축소하기 위한 것입니다.
  2. 새 메시지 트리의 XML 구문 분석기를 작성합니다.
  3. InputRoot.XML을 새 메시지 트리로 복사합니다.
  4. 입력 메시지의 헤더에 있는 SaleListCount 필드 값을 확보합니다. 이 값은 메시지에서 SaleList 항목이 반복되는 횟수를 지정합니다. 처리한 횟수로 점검합니다.
  5. SaleList 구조의 각 인스턴스에 대한 WebSphere MQ 메시지를 형식화합니다. 
  6. 형식화된 메시지를 WebSphere MQ 메시지로 기록할 수 있도록 메시지 플로우 나머지와 함께 형식화된 메시지를 송신합니다. PROPAGATE 동사를 사용하여 수행됩니다.
  7. WebSphere MQ 메시지를 형식화하고 SaleEnvelope 메시지 처리 확인을 표시하도록 기록합니다.

Filter 노드 IdentifyWhenSlicingIsComplete는 ProduceMessageSlicesFromRepeatingElements 노드로 전달되었던 메시지에 필터 표현식을 적용합니다. 테스트의 목적은 노드를 입력한 메시지가 처리된 SaleList 메시지나 배치 확인 메시지 큐에 기록되어야 하는 것인지를 식별하기 위한 것입니다. SaleList 항목이 포함되는 메시지인 경우, 처리에서는 WebSphere MQ 큐로 메시지를 기록하는 MQOutput 노드 RepeatedElementSlices로 전달됩니다. IdentifyWhenSlicingIsComplete 필터에서 수신한 메시지가 배치 확인인 경우, 이 메시지는 MQOutput 노드 MessageSlicingComplete를 사용하여 SaleList 항목과는 다른 큐에 WebSphere MQ 메시지로서 기록됩니다.

다른 오류 조건을 처리하기 위한 추가 노드가 메시지 플로우에 있습니다. MQOutput 노드 General Failure는 MQInput 노드의 Failure 터미널로 접속됩니다. MQInput 노드 내 처리에서 오류가 발생하면 노드는 MQOutput 노드에 지정한 이름의 큐로 메시지를 기록합니다. MQInput 노드의 Catch 노드는 Filter 노드인 CatchProcessing에 연결됩니다. 메시지 플로우를 따라 예외가 전달되고 이 노드에서 예외가 포착될 경우, 메시지는 이 라우트에 따라 전달됩니다. CatchProcessing의 필터 표현식은 처리 중인 메시지가 예상한 형식으로 되어 있는지를 판별합니다. 예상한 형식이 아니면, 처리에서는 사용자 오류를 전달한 Throw Error 노드로 전달됩니다. 메시지 형식에 결함이 있는 경우(예를 들어, 마지막 필드가 SlicingReport가 아닌 경우), 처리에서는 오류 큐로 기록된 MQOutput 노드 Malformed 메시지로 전달됩니다.

테스트 메시지

Message Routing 샘플을 구동시키는 데 사용하는 테스트 메시지는 소비자에 대한 송장 세부사항이 포함된 자체 정의 XML 메시지입니다. SaleList 항목을 반복하여 메시지의 크기를 확장할 수 있습니다. 샘플 메시지에는 SaleList 항목이 10번 반복되어 있습니다. 메시지 레이아웃은 다음과 같습니다. 이 경우에는 SaleList의 단일 인스턴스만 표시됩니다.

<SaleEnvelope>
<Header>
<SaleListCount>1</SaleListCount>
</Header>
<SaleList>
<Invoice>
<Initial>K</Initial>
<Initial>A</Initial>
<Surname>Braithwaite</Surname>
<Item>
<Code>00</Code>
<Code>01</Code>
<Code>02</Code>
<Description>Twister</Description>
<Category>Games</Category>
<Price>00.30</Price>
<Quantity>01</Quantity>
</Item>
<Item>
<Code>02</Code>
<Code>03</Code>
<Code>01</Code>
<Description>The Times Newspaper</Description>
<Category>Books and Media</Category>
<Price>00.20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>00.50</Balance>
<Currency>Sterling</Currency>
</Invoice>
<Invoice>
<Initial>T</Initial>
<Initial>J</Initial>
<Surname>Dunnwin</Surname>
<Item>
<Code>04</Code>
<Code>05</Code>
<Code>01</Code>
<Description>The Origin of Species</Description>
<Category>Books and Media</Category>
<Price>22.34</Price>
<Quantity>02</Quantity>
</Item>
<Item>
<Code>06</Code>
<Code>07</Code>
<Code>01</Code>
<Description>Microscope</Description>
<Category>Miscellaneous</Category>
<Price>36.20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>81.84</Balance>
<Currency>Euros</Currency>
</Invoice>
</SaleList>
<Trailer>
<CompletionTime>12.00.00</CompletionTime>
</Trailer>
</SaleEnvelope>

기본 페이지 아이콘   샘플 홈으로 돌아가기