Как с помощью Esper выполнить динамическую фильтрацию событий?

Я новичок в использовании механизма потока событий 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 )

Есть ли другие варианты? Проблемы с производительностью для любого из них?


person cmonkey    schedule 16.09.2010    source источник


Ответы (1)


После некоторого колебания я использовал вторую идею в вопросе.

Переменная должна быть установлена ​​в конфигурации перед запуском с помощью

Set<String> mySetOfValues = new HashSet<String>();

esperConfiguration.addVariable( mySourcesVariable, Set.class, mySetOfValues );

Веб-служба работает, как описано, с набором вместо массива.

Теперь все хорошо, и производительность не так уж плоха, так что я продолжаю.

person cmonkey    schedule 27.09.2010