Создание более сложных EPN в Esper CEP - PullRequest
0 голосов
/ 15 декабря 2018

Я только что реализовал простой пример Esper CEP в Java.Аналогично примеру .

Configuration config = new Configuration();
            config.addEventType("SensorEvent",
                    test.SensorEvent.class.getName());
            EPServiceProvider epService = EPServiceProviderManager
                    .getDefaultProvider(config);

            String expression = "select * from SensorEvent where sensor11 >= 1.00";

            EPStatement statement = epService.getEPAdministrator().createEPL(expression);

            MyListener listener = new MyListener();

            statement.addListener(listener);

Однако в этом примере предполагается, что применяется только простой фильтр EPA.Теперь я хотел бы объединить несколько EPA во время выполнения, как показано в следующем примере.К сожалению, я не могу найти примеров для такой реализации: enter image description here У кого-нибудь есть пример?.

Заранее спасибо

Редактировать: Пока ясделал так, как user650839 сказал:

String expression = "@name('EPA1') insert into EPA1 select * from SensorEvent where sensor11 >= 1";
        String expression2 = "@name('EPA2') insert into EPA2 select * from SensorEvent where sensor12 >= 1";
        String expression3 ="@name('EPA3') select * from EPA1#time(100) as epa1, EPA2#time(200) as epa2 where epa1.id = epa2.id";
EPStatement statement = epService.getEPAdministrator().createEPL(expression);
            EPStatement statement2 = epService.getEPAdministrator().createEPL(expression2);
            EPStatement statement3 = epService.getEPAdministrator().createEPL(expression3);
 MyListener listener = new MyListener();

            statement.addListener(listener);
            statement2.addListener(listener);
            statement3.addListener(listener);

Код отлично скомпилирован, но мой обработчик событий также отвечает, когда датчик 12 меньше 1. Поэтому я думаю, достаточно, если одно из моих утверждений верно, но мойОбработчик событий должен реагировать, только если все операторы верны.

1 Ответ

0 голосов
/ 15 декабря 2018
@name('EPA1') insert into EPA3 select * from SensorEvent(sensor11>1);
@name('EPA2') insert into EPA3 select * from SensorEvent(sensor11<1);
@name('EPA3') select count(*) from EPA3

или, может быть, в зависимости от того, что именно означает рисунок

@name('EPA1') insert into EPA1 select * from SensorEvent(sensor11>1);
@name('EPA2') insert into EPA2 select * from SensorEvent(sensor11<1);
@name('EPA3') select * from EPA1#time(10) as epa1, EPA2#time(20) as epa2 where epa1.sensorId = epa2.sensorId

Возможно, шаблоны решений будут вдохновлять вас дальше.

...