Timeout Processing サンプルは、Timeout Control ノードと Timeout Notification ノードで提供されるタイムアウト機能の使用法を例示しています。これらのノードを使うと、メッセージ・フローを自動で定期的に駆動することができます。これを自動タイムアウト と言います。あるいは、各メッセージごとに、制御されたタイムアウト をアプリケーションに提供することもできます。
自動タイムアウトは、自動モードで実行する単一の Timeout Notification ノードを使用して実現できます。 隣接フロー呼び出しの間隔を決定するために、構成パラメーターとしてインターバル (秒単位) を指定しなければなりません。 自動タイムアウトの使用法としては、次のものがあります。
制御されたタイムアウトは、1 つ以上の Timeout Control ノードを 1 つの Timeout Notification ノードと並行して使用することにより実現できます。同じ ID を構成パラメーターとして指定することによって、これらのノードを一緒に関連付けなければなりません。(Timeout Control ノードと Timeout Notification ノードの間には、多対 1 の関係があります。つまり、単一の Timeout Notification ノードが、一致する ID を持つすべての Timeout Control ノードのタイムアウト要求を処理します。) Timeout Control ノードは、固定フォーマットのタイムアウト要求の入った着信メッセージを受け取ります。これらのメッセージは妥当性検査されて保管され、有効期限が切れると Timeout Notification ノードによって処理されます。
タイムアウト要求には、これを処理する Timeout ノード群の有効範囲の中で通用する固有 ID があります。これは、Timeout ノード群を一緒に関連付けるために使用する ID と同じものではありません。 タイムアウト要求は、開始時刻、インターバル、およびカウントに基づいています。 タイムアウト要求は、将来の任意の時点で開始するように構成すること、および (カウントを 1 以上に設定することにより) 1 回以上 ping を行うように構成することができます。 カウントが 1 よりも大きい場合、隣接する ping は、インターバルで指定された秒数で分割されます。
Timeout Processing サンプルには、AutomaticTimeout および ControlledTimeout という 2 つのメッセージ・フローが含まれています。
この図は、自動モードで Timeout Notification ノードを使用する方法を示しています。
このフローは、ブローカーの実行中、10 秒に 1 回ずつ ping するよう設定されています。
この図は、Timeout Control ノードと Timeout Notification ノードを併用する方法を示しています。 この単一の .msgflow ファイルには 2 つのメッセージ・フローが含まれています。1 つはタイムアウトを要求するため、もう 1 つはタイムアウトを処理するためのものです。
これらのフローは、タイムアウト要求の入ったテスト・メッセージ (以下で説明します) によって駆動され、TimeoutAll と TimeoutFragment の各 Timeout Control ノードによって処理されます。これらのノードはタイムアウト要求の妥当性検査とメッセージの保管を行い、メッセージが到着し次第、2 番目のフローの Controlled Timeout Notification ノードがこれを処理できるようにします。
TimeoutAll ノードは着信メッセージ全体を保管し、TimeoutFragment ノードは着信メッセージのうち定義されている部分を保管します。この動作は、Timeout Control ノードの「メッセージ」タブの下のプロパティーによって制御されます。
ControlledTimeout メッセージ・フローを駆動するために使用される 4 つのテスト・メッセージは、顧客用の送り状明細の入った単純な XML メッセージです。次の XML は 4 つのメッセージのうちの 1 つの例です。
<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 Notification ノードが処理することになる要求されたタイムアウトを判別するために、Timeout Control ノードによって使用されます。この場合、開始の日付と時刻は定義されていないので、デフォルト値 (TODAY と NOW) が採用されます。<TimeoutRequest> フィールドに指定されている情報は、10 秒ごとに 10 回 ping を実行したらタイムアウトを完了するよう要求するものです。
提供されているメッセージのうち 2 つのメッセージには、タイムアウトを設定するタイムアウト要求が含まれています。1 つは ping を 10 回実行したら完了するもの、もう 1 つは無制限に続行するものです。残りの 2 つのテスト・メッセージには、上記の 2 つのタイムアウト要求の取り消し要求が含まれており、同様の方法で処理されます。