Ein TimeoutControl-Knoten ist einem TimeoutNotification-Knoten dadurch zugeordnet, dass beide Knoten mit derselben Kennung konfiguriert werden. Der Mustercode 'ControlledTimeout' veranschaulicht, dass einem TimeoutNotification-Knoten mehrere TimeoutControl-Knoten zugeordnet werden können. Dieses Szenario bedeutet, dass Sie Zeitlimitanforderungen, die von einem TimeoutControl-Knoten verarbeitet werden, aktualisieren oder abbrechen und einen der anderen TimeoutControl-Knoten, die demselben TimeoutNotification-Knoten zugeordnet sind, verwenden können.
Sie können es ausprobieren: Die einfachste Methode ist es, die .mbtest-Dateien mit Abbruchanforderungen zu bearbeiten, damit sie in die andere Eingabewarteschlange eingereiht und von dem anderen Knoten verarbeitet werden. Eine erweiterte Option ist es, den Wert des Feldes 'AllowOverwrite' in der Zeitlimitanforderung auf 'TRUE' (Wahr) zu setzen, denn dadurch löscht der TimeoutControl-Knoten die aktuell auszuführende Zeitlimitanforderung zu Gunsten der neu eingehenden Anforderung (sofern diese mit der Markierung 'Identifier' in der Zeitlimitanforderung selbst übereinstimmt). Sie können auch neue Nachrichten mit Zeitlimitanforderungen und unterschiedlichen Zeitlimitkennungen erstellen, um die Verarbeitung mehrerer gleichzeitiger Zeitlimits zu testen.
Im Mustercode ist die Zeitlimitanforderung im Hauptteil der Nachricht enthalten. Sie kann in der Nachrichtenbaumstruktur an eine beliebige Stelle verschoben werden und der TimeoutControl-Knoten sucht in der lokalen Umgebung nach ihr, sofern dies bei der Konfiguration nicht anders angegeben wurde. Damit dieses Verhalten genutzt werden kann, muss vor dem TimeoutControl-Knoten ein Rechenknoten eingefügt werden, um diese Informationen hinzuzufügen, wie im ESQL-Code dargestellt, der darüber hinaus veranschaulicht, wie die Zeitlimitkennung als dynamisch eingestellt werden kann, um Kollisionen zu vermeiden.
CREATE COMPUTE MODULE Timeout_Set
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
SET OutputRoot = InputRoot;
SET OutputLocalEnvironment.TimeoutRequest.Action = 'SET';
SET OutputLocalEnvironment.TimeoutRequest.Identifier = OutputRoot.XMLNSC.Data.UniqueId;
SET OutputLocalEnvironment.TimeoutRequest.StartDate = 'TODAY';
SET OutputLocalEnvironment.TimeoutRequest.StartTime = 'NOW';
SET OutputLocalEnvironment.TimeoutRequest.Count = 10;
SET OutputLocalEnvironment.TimeoutRequest.Interval = 5;
RETURN TRUE;
END;
END MODULE;
Achten Sie darauf, dass im Rechenknoten die Einstellungen 'Pass Message' (Nachricht übergeben) und 'LocalEnvironment' (Lokale Umgebung) festgelegt sind. Anschließend muss für den TimeoutControl-Knoten eine leere Anforderungsposition angegeben werden, sofern der Standardwert geändert wurde:
Schließlich veranschaulicht der ESQL-Code auch, wie ein einmaliges zukünftiges Zeitlimit von 60 Sekunden durch Generieren einer relativen Zeit festgelegt wird:
CREATE COMPUTE MODULE UT_CONTROL_TIMEOUT_10
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
SET OutputRoot = InputRoot;
DECLARE jump INTERVAL;
SET jump = INTERVAL '60' SECOND;
DECLARE start TIME;
SET start = CURRENT_TIME + jump;
SET OutputLocalEnvironment.TimeoutRequest.Action = 'SET';
SET OutputLocalEnvironment.TimeoutRequest.Identifier = 'control';
SET OutputLocalEnvironment.TimeoutRequest.StartDate = 'TODAY';
SET OutputLocalEnvironment.TimeoutRequest.StartTime = start;
RETURN TRUE;
END;
END MODULE;