Я новичок в использовании механизма потока событий Esper в Java. Сценарий заключается в том, что события поступают как POJO. У них есть поле, которое я хочу отфильтровать. Отфильтрованные значения будут меняться со временем. Я бы предпочел не удалять, а вставлять новый оператор каждый раз, когда происходит изменение.
Пример:
Событие называется «MyEvent» и имеет поле «источник». Значение может быть одним из "дом", "работа" или "школа". Веб-служба позволяет пользователям изменять интересующие их значения «source». Оператор EPL будет выглядеть так:
select * from MyEvent where source in ( 'home', 'school' )
Так что в любой момент «школа» может быть удалена, а последствия должны быть отражены как можно быстрее. Вопрос в том, как лучше это сделать? Я исключил кэшированные вызовы базы данных из-за задержки между вступлением в силу обновления.
Идеи:
1) Создайте поток под названием «SourcesOfInterest» с полем «источники» типа «Список» и измените оператор следующим образом:
select * from MyEvent where source in (SourcesOfInterest.win:length(1).sources)
Веб-служба вставляет события SourcesOfInterest в этот поток, где просматриваются только самые последние. Даже не уверен, что синтаксис правильный.
2) Пусть оператор ссылается на переменную времени выполнения. Тогда заявление будет таким:
select * from MyEvent where source in ( mySourcesVariable )
Веб-служба будет вызывать
EPRuntime.setVariableValue( "mySourcesVariable", myArrayOfSources )
Есть ли другие варианты? Проблемы с производительностью для любого из них?