Drools를 처음 사용했습니다. Drools Fusion을 사용하여 간단한 CEP (Complex Event Processing) 응용 프로그램을 작성하려고합니다. 다음과 같이이벤트 처리
public class Event {
private String id;
private Date timestamp;
private String source;
private Event.Severity severity;
private String description;
/// With Getter and Setter ///
}
규칙 파일은 다음과 같습니다 :
내 요구 사항은 다음과 같이
- on receipt of a CRITICAL event, perform an action (right now that's a SOP)
- if another CRITICAL event arrives within 5 minutes of the previous event
and from the same source, ignore it
내가하는 간단한 이벤트 클래스가 있습니다
declare Event
@role(event)
end
rule "Alert for CRITICAL events. Don't alert for the next 5 minutes if
from the same source"
when
$ev1: Event($source: source, severity == Event.Severity.CRITICAL)
from entry-point "events"
not (
Event(this != $ev1, source == $source,
severity == Event.Severity.CRITICAL,
this before [1ms, 5m] $ev1) from entry-point "events"
)
then
System.err.println("###### CRITICAL alert caused by event: "
+ $ev1.getId());
end
테스트를 위해 4m 이벤트를 각각 0m, 4m, 10m, 12m의 타임 라인으로 작업 메모리 - e1, e2, e3, e4에 주입합니다. 나는 그것이 더 앞의 이벤트가 없기 때문에 규칙을 통과 E1 기대
Event event1 = new Event("e1", new Date(), "server1",
Event.Severity.CRITICAL, "server down");
//calendar.add(Calendar.MINUTE, 4);
Event event2 = new Event("e2", new Date(), "server1",
Event.Severity.CRITICAL, "server down");
//calendar.add(Calendar.MINUTE, 6);
Event event3 = new Event("e3", new Date(), "server1",
Event.Severity.CRITICAL, "server down");
//calendar.add(Calendar.MINUTE, 2);
Event event4 = new Event("e4", new Date(), "server1",
Event.Severity.CRITICAL, "server down");
eventsEP.insert(event1);
clock.advanceTime(4, TimeUnit.MINUTES);
eventsEP.insert(event2);
clock.advanceTime(6, TimeUnit.MINUTES);
eventsEP.insert(event3);
clock.advanceTime(2, TimeUnit.MINUTES);
eventsEP.insert(event4);
ksession.fireAllRules();
Jave 클래스 파일. 선행 이벤트가 6 분 남았 기 때문에 e3도 통과 할 것으로 기대합니다. E1
이벤트에 의한 출력
- CRITICAL 경고를 기대 : 그러나
, 나는 다른 출력을 얻을
그러나 나는 받고있다
- 이벤트로 인한 위험 경고 : E1
- 이벤트로 인한 위험 경고 : E2
- 이벤트로 인한 위험 경고 : E3
추가 정보 : 나는 STREAM 모드를 사용하고 있습니다 이벤트 처리. 누구나 출력을 설명하고 내가 틀린 위치를 말해 줄 수 있습니까? 감사!