Timeout Processing 样本说明 TimeoutControl 和 TimeoutNotification 节点提供的超时函数的用途。 可以使用这些节点定期自动驱动消息流(也称为自动超时),或者按消息向应用程序提供受控超时。
可以使用以自动方式运行的一个 TimeoutNotification 节点实现自动超时。必须提供时间间隔(以秒为单位)作为配置参数,以便确定相邻流调用之间的时间段。自动超时的用途包括:
可以使用一个或多个 TimeoutControl 节点依次伴以 TimeoutNotification 节点实现受控超时。必须通过提供同一个标识作为配置参数来将这些节点关联在一起。(TimeoutControl 与 TimeoutNotification 节点之间存在多对一关系,即一个 TimeoutNotification 节点处理具有匹配标识的所有 TimeoutControl 节点的超时请求。)TimeoutControl 节点接收其中包含固定格式超时请求的入局消息,然后验证并存储这些消息,再在到期时由 TimeoutNotification 节点处理。
超时请求有一个唯一标识,该唯一标识在处理这个超时请求的 Timeout 节点的范围之内。该标识与用于将 Timeout 节点关联在一起的标识不同。超时请求基于开始时间、时间间隔和计数。可以将超时请求配置为在将来任意时刻启动,并使用 1 或更大数字 ping 一次或多次。如果计数大于 1,将使用时间间隔中提供的秒数分隔相邻 ping。
Timeout Processing 样本包含两个消息流:AutomaticTimeout 和 ControlledTimeout。
此图显示如何以自动方式使用 TimeoutNotification 节点:

此流设置为 Integration 节点正在运行时每隔 10 秒 ping 一次。
此图显示如何将 TimeoutControl 与 TimeoutNotification 节点结合使用。这一个 .msgflow 文件包含两个消息流:一个用于请求超时,一个用于处理超时。

这些流由本主题后文中描述的测试消息驱动,这些测试消息中包含超时请求,由 TimeoutAll 和 TimeoutFragment TimeoutControl 节点处理。这些节点验证超时请求,并将 Controlled TimeoutNotification 节点的消息存储在另一个流中,以便在消息到达时进行处理。
TimeoutAll 节点存储整个入局消息,而 TimeoutFragment 节点则存储入局消息的已定义部分。此行为受 TimeoutControl 节点的 Message 属性控制。
用于驱动 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>
头中嵌入的 TimeoutRequest 字段由 TimeoutControl 节点用于确定 TimeoutNotification 节点要处理的请求超时。在这种情况下,将不定义开始日期和时间,因此会采用缺省值 TODAY 和 NOW。TimeoutRequest 字段中指定的信息请求超时在完成之前每隔 10 秒 ping 一次,共 10 次。
提供的两个消息包含设置超时的超时请求,一个 ping 10 次并完成,另一个一直 ping 下去。 其他两个测试消息包含这两个超时请求的取消请求,并按照相同方式处理。