0

WSO2 CEP 3.1.0 から WSO2 CEP 4.0.0 に移行しようとしています。

既存の実行計画を新しい SiddhiQL 構文に変換しました。

@Plan:name('occurredFailure')

@Import('responseTimeStream:1.0.0')
define stream responseTimeStream (service string, responseTime int);

@Import('queryTimeStream:1.0.0')
define stream queryTimeStream (service string, queryTime int);

@Export('occurredFailureStream:1.0.0')
define stream occurredFailureStream (service string, cause string);

define table slowestQueryTimeTable (service string, slowestQueryTime int);

from responseTimeStream[responseTime == 0]
select service, 'noResponse' as cause
insert into occurredFailureStream;

from queryTimeStream[queryTime >= 5000]
select service, 'queryTimeout' as cause
insert into occurredFailureStream;

from queryTimeStream[not((service == slowestQueryTimeTable.service) in slowestQueryTimeTable)]
select service, queryTime as slowestQueryTime
insert into slowestQueryTimeTable;

from queryTimeStream[(service == slowestQueryTimeTable.service and queryTime <= slowestQueryTimeTable.slowestQueryTime) in slowestQueryTimeTable]
select service, queryTime as slowestQueryTime
update slowestQueryTimeTable
on queryTimeStream.service == slowestQueryTimeTable.service;

from responseTimeStream[(service == slowestQueryTimeTable.service and responseTime >= slowestQueryTimeTable.slowestQueryTime) in slowestQueryTimeTable]
select service, 'responseTimeAboveQueryTime' as cause
insert into occurredFailureStream;

残念ながら、クエリ式を検証しようとすると、WSO2 CEP 4.0.0 は次の例外をスローします。

テーブル 'slowestQueryTimeTable' の更新を作成できません。参照付きのストリーム: queryTimeStream が実行計画 "occurredFailure" に見つかりません

テーブル「slowestQueryTimeTable」とそれに関連する式を削除すると、残りのクエリ式が正常に検証され、ストリーム「queryTimeStream」が実際に見つかったことになるため、エラー メッセージはあまり役に立ちません。

この例外のデバッグを手伝ってもらえますか?

4

1 に答える 1

1

ここで問題はクエリにあります

from queryTimeStream[(service == slowestQueryTimeTable.service and queryTime <= slowestQueryTimeTable.slowestQueryTime) in slowestQueryTimeTable]
select service, queryTime as slowestQueryTime
update slowestQueryTimeTable
 on queryTimeStream.service == slowestQueryTimeTable.service;

queryTimeStream出力データは からのものではないため、更新条件では使用しないでqueryTimeStreamください。以下のようにクエリを更新します

from queryTimeStream[(service == slowestQueryTimeTable.service and queryTime <= slowestQueryTimeTable.slowestQueryTime) in slowestQueryTimeTable]
select service, queryTime as slowestQueryTime
update slowestQueryTimeTable
 on service == slowestQueryTimeTable.service;
于 2015-10-08T15:20:48.320 に答える