關於 Timeout Processing 範例

Timeout Processing 範例示範如何使用 TimeoutControl 及 TimeoutNotification 節點所提供的逾時功能。您可以使用這些節點,定期自動驅動訊息流程,這就是所謂的自動逾時,或者您可以依個別訊息來提供受管制的逾時給應用程式。

您可以使用以「自動」模式執行的單一 TimeoutNotification 節點,來達成自動逾時的目的。您必須提供時間間隔(以秒為單位)來做為配置參數,以決定二個相鄰流程呼叫之間的間隔。自動逾時的使用包括:

您可以將一或數個 TimeoutControl 節點與一個 TimeoutNotification 節點前後搭配使用,以達成受管制的逾時。您必須提供相同的 ID 來做為配置參數,使這些節點互相關聯。(TimeoutControl 與 TimeoutNotification 節點之間具有多對一的關係,換句話說,就是單一 TimeoutNotification 節點將會處理具有相符 ID 之所有 TimeoutControl 節點的逾時 要求。)TimeoutControl 節點會接收含有修正格式之逾時要求的送入訊息,然後這些逾時要求會被驗證和儲存, 當其過期時,TimeoutNotification 節點就會加以處理。

逾時要求具有一個唯一 ID,其位於處理該要求之 Timeout 節點的範圍中。它和用來使 Timeout 節點產生關聯的 ID 不同。逾時要求是以開始時間、間隔及計數為依據。您可以將逾時要求配置為在未來的某一點開始,並使用 1 或以上的計數,使其 ping 一次或多次。如果計數大於 1,則會以提供在間隔中的秒數來將相鄰的 ping 分開。

Timeout Processing 範例包含二個訊息流程:AutomaticTimeout 及 ControlledTimeout。

AutomaticTimeout 訊息流程

該圖顯示如何以「自動」模式使用 TimeoutNotification 節點:

自動逾時流程

此流程設定為當整合節點執行時,每 10 秒 ping 一次。

ControlledTimeout 訊息流程

該圖顯示如何搭配使用 TimeoutControl 及 TimeoutNotification 節點。 這個單一 .msgflow 檔案包含二個訊息流程:一個用來要求逾時,一個用來處理要求。

受管制的逾時流程

這些流程是由測試訊息來驅動,這些訊息在本主題的稍後部分說明,其包含逾時要求,並由 TimeoutAll 及 TimeoutFragment TimeoutControl 節點來處理。這些節點會驗證逾時要求,並將 Controlled TimeoutNotification 節點的訊息儲存在第二個流程中,以在其到達時加以處理。

TimeoutAll 節點會儲存整個送入的訊息,而 TimeoutFragment 節點會儲存送入訊息的已定義部分。此行為由 TimeoutControl 節點的訊息內容控制。

測試訊息

用來驅動 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>

TimeoutControl 節點會使用內嵌在 Header 中的 TimeoutRequest 欄位,判斷要由 TimeoutNotification 節點處理的逾時要求。在此案例中,並沒有定義開始日期和時間,所以其採用預設值 TODAYNOWTimeoutRequest 欄位中所指定的資訊則要求在完成之前,逾時 ping 10 次,每隔 10 秒一次。

所提供的其中二則訊息包含了設定逾時的逾時要求,一個是 ping 10 次後結束,另一個則是無限期繼續。 其他二則測試訊息包含那二個逾時要求的取消要求,並且會以相同的方式處理。

回到範例首頁