Timeout Processing サンプルの拡張

TimeoutControl ノードと TimeoutNotification ノードが同じ ID を持つように構成することによって、両者は関連付けられます。ControlledTimeout サンプルは、複数の TimeoutControl ノードを 1 つの TimeoutNotification ノードに関連付けることができることを示しています。このシナリオは、1 つの TimeoutControl ノードで処理されるタイムアウト要求を、同じ TimeoutNotification ノードと関連付けられた他の TimeoutControl ノードのいずれかを使用して、更新またはキャンセルできるということを意味します。

このシナリオを試してみる場合、最も簡単な方法は、取り消し .mbtest ファイルを編集して、他の入力キューに書き出されるようにし、こうして他のノードで処理されるようにすることです。 また、より高度な方法として、タイムアウト要求の AllowOverwrite フィールドを TRUE に変更することもできます。これにより TimeoutControl ノードは、現在実行中のタイムアウト要求を廃棄して、新しく着信した要求を実行します (タイムアウト要求自体の Identifier タグと一致する場合)。また、異なるタイムアウト ID を使用して新しいタイムアウト要求メッセージを作成し、複数の並行タイムアウトの処理をテストすることもできます。

このサンプルでは、タイムアウト要求はメッセージの本体に含まれています。タイムアウト要求はメッセージ・ツリー内のどこにでも渡すことができますが、構成時に特に指定されていない限り、TimeoutControl ノードはローカル環境でこれを探します。この動作を利用するには、以下の ESQL に示すとおり、TimeoutControl ノードがこの情報を追加するより前のどこかの場所に、Compute ノードを追加しなければなりません。さらにこの ESQL では、タイムアウト ID を動的に設定して、競合しないようにする方法も示されています。

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;

Compute ノードを「メッセージと LocalEnvironment を渡す」に設定するのを忘れないようにしてください。その後、TimeoutControl ノードの「要求ロケーション」がデフォルト値から変更されている場合は、これをブランクに変更する必要があります。

Timeout Control ノードの「要求ロケーション」

以下の ESQL では、相対的な時間を生成することにより、60 秒間のタイムアウトが将来 1 回だけ行われるように設定する方法を示しています。

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;

サンプルのホームに戻る