简体   繁体   English

WSO2 Siddhi 复杂事件处理器问题

[英]WSO2 Siddhi Complex Event Processor question

Environment: WSO2 Stream Processor 4.3.0环境:WSO2 Stream Processor 4.3.0

Let's say I have two very simple streams:假设我有两个非常简单的流:

Stream where newly created requests (unfulfilled) are being delivered in real time (t1)实时传递新创建的请求(未完成)的流 (t1)

RequestStream(requestId)

Stream where requestsIds appear when the request has been fulfilled in real time (t2)当请求被实时完成时,requestIds 出现的流 (t2)

FulfilmentStream(requestId)

It's guaranteed that t2 is always > t1保证 t2 总是 > t1

How can I implement a SiddhiQL statement to identify requestIds that appear at RequestStream (event1) and haven't appeard in FulfilmentStream (event2) after 5 minutes have been elapsed since event1?如何实现 SiddhiQL 语句来识别出现在RequestStream (event1) 中并且在 event1 过去 5 分钟后没有出现在FulfilmentStream (event2)中的requestIds

Working Siddhi App based on Tishan answer:基于 Tishan 的工作 Siddhi 应用程序答案:

@App:name('FailedToFulfillInAmountOfTime')

@source(
type="kafka",
topic.list="some_topic",
threading.option="single.thread",
group.id="some_group",
bootstrap.servers="xxx.xxx.xxx.xxx:6667",
@Map(type="json", @attributes(request_id = '$.alarm_id', severity = '$.severity', managed_object = '$.ManagedObject')))
define stream OrigAlarmStream (request_id int, severity string, managed_object string); 

@sink(type='log', prefix='Got this execution request')
define stream RequestStream (request_id int, severity string, managed_object string);

@sink(type='log', prefix='Got this fulfillment confirmation:')
define stream FulfillmentStream (request_id int, severity string, managed_object string);

@sink(type='log', prefix='This fulfillment was not done within 1 min:')
define stream AlertStream(request_id int);

@info(name='getExpiredRequests')
from every e1=RequestStream -> not FulfillmentStream[e1.request_id == request_id] for 1 min
select e1.request_id
insert into AlertStream;

@info(name='CopyFulfillments')
from OrigAlarmStream[severity == 'Clear']
select request_id, severity, managed_object
insert into FulfillmentStream;

@info(name='CopyRequests')
from OrigAlarmStream[severity != 'Clear']
select request_id, severity, managed_object
insert into RequestStream;

You can use logical patterns to achieve your requirement.您可以使用逻辑模式来实现您的要求。 Please refer below query.请参考以下查询。

from e1=RequestStream -> not e2=FulfilmentStream[e1.requestId == e2.requestId] for '5 min'
select e1.requestId as requestId
insert into AlertStream;

Here we have defined a pattern with not condition.这里我们定义了一个没有条件的模式。 This will be triggered when an event in RequestStream comes and within 5 minutes no event comes into FulfilmentStream within 5 minutes.这将在 RequestStream 中的事件到来且 5 分钟内没有事件进入 FulfilmentStream 时触发。 Please refer logical patterns for more information.请参阅逻辑模式以获取更多信息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM