Timeout Processing 샘플에서는 Timeout Control 및 Timeout Notification 노드와 같은 시간 종료 함수의 사용에 대해 설명합니다. 이러한 노드를 사용하여 정기적으로 메시지 플로우를 자동 구동시킬 수 있습니다. 이를 자동 시간 종료라고 합니다. 또는 각각의 메시지를 기초로 응용프로그램에 제어된 시간 종료를 제공할 수 있습니다.
자동 모드에서 실행 중인 단일 Timeout Notification 노드와 함께 자동 시간 종료를 수행할 수도 있습니다. 인접 플로우 호출과의 간격을 판별하기 위해 구성 매개변수로서 간격(초 단위)을 제공해야 합니다. 자동 시간 종료 사용에는 다음이 포함됩니다.
Timeout Notification 노드와 함께 하나 이상의 Timeout Control 노드로 제어된 시간 종료를 수행할 수 있습니다. 구성 매개변수와 동일한 ID를 제공하여 노드를 함께 연관시켜야 합니다. (Timeout Control 및 Timeout Notification 노드 사이에 다대일 관계가 성립합니다. 즉, 하나의 Timeout Notification 노드가 ID가 일치하는 모든 Timeout Control 노드의 시간 종료 요청을 처리합니다.) Timeout Control 노드가 고정 형식의 시간 종료 요청이 포함된 수신되는 메시지를 수신하면 Timeout Notification 노드가 만기 시 이들의 유효성을 검증하고 저장한 후 처리합니다.
시간 종료 요청에는 이를 처리하는 Timeout 노드 범위 내의 고유 ID가 있습니다. 이는 Timeout 노드와 함께 연관시키는 데 사용된 ID와 같지 않습니다. 시간 종료 요청은 시작 시간, 간격 및 계수를 기초로 합니다. 이후 언제든지 시작할 수 있고 계수가 1 또는 그 이상인 상태로 한 번 또는 그 이상 ping하도록 구성할 수 있습니다. 계수가 1보다 크면, 다음 ping이 간격으로 지정된 초 수만큼 분리됩니다.
Timeout Processing 샘플에는 두 개의 메시지 플로우, 즉 AutomaticTimeout 및 ControlledTimeout이 포함됩니다.
아래 그림은 자동 모드에서 Timeout Notification 노드를 사용하는 방법을 보여줍니다.
이 플로우는 브로커가 실행 중인 동안 10초마다 한 번씩 ping하도록 설정됩니다.
아래 그림은 Timeout Control 및 Timeout Notification 노드를 함께 사용하는 방법을 보여줍니다. 이 단일 .msgflow 파일에는 두 개의 메시지 플로우가 포함되는데, 하나는 시간 종료를 요청하는 메시지 플로우이고, 다른 하나는 이를 처리하는 메시지 플로우입니다.
이 플로우는 아래에서 설명하는 시간 종료 요청이 포함되는 테스트 메시지로 구동되며, TimeoutAll 및 TimeoutFragment Timeout Control 노드에서 처리합니다. 이 노드는 시간 종료 요청의 유효성을 검증하고 Controlled Timeout Notification 노드의 메시지를 도착하는 대로 처리하도록 두 번째 플로우에 저장합니다.
TimeoutAll 노드는 수신되는 전체 메시지를 저장하고, TimeoutFragment 노드는 수신되는 메시지 중 정의된 부분만을 저장합니다. 이 작동은 Timeout Control 노드의 메시지 탭에 있는 등록 정보로 제어합니다.
ControlledTimeout 메시지 플로우를 구동시키는 데 사용된 네 개의 테스트 메시지는 고객에 대한 송장 세부사항이 포함되는 간단한 XML 메시지입니다. 다음 XML은 네 개의 메시지 중 하나의 예입니다.
<SaleEnvelope>
<Header>
<SaleListCount>1</SaleListCount>
<TimeoutRequest>
<Action>SET</Action>
<Identifier>tentimes</Identifier>
<Count>10</Count>
<Interval>10</Interval>
<AllowOverwrite>FALSE</AllowOverwrite>
</TimeoutRequest>
</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>
<Header>에 임베드된 <TimeoutRequest> 필드는 Timeout Control 노드가 Timeout Notification 노드에서 처리할 요청된 시간 종료를 판별하는 데 사용합니다. 이 경우 시작 날짜와 시간은 정의되지 않으므로 디폴트 값 TODAY 및 NOW를 사용합니다. <TimeoutRequest> 필드에서 지정된 정보는 완료하기 전에 10초 간격으로 10번 ping하도록 요청합니다.
공급되는 메시지 중 두 개의 메시지에는 시간 종료를 설정하는 시간 종료 요청이 포함되는데, 하나는 10번 ping한 후 완료하는 메시지이고, 다른 하나는 무한대로 계속하는 메시지입니다. 다른 두 테스트 메시지에는 두 시간 종료 요청에 대한 취소 요청이 포함되며, 동일한 방식으로 처리됩니다.