2013-12-03 4 views
3

В настоящее время мы тестируем сиддхи wso2 cep.wso2: cep: siddhi: как сделать время окон стойким

Мы должны иметь возможность перезагрузить серверный процесс wso2, не теряя данные, накопленные в окне (например, временное окно).

Есть ли способ сделать временные окна стойкими, чтобы сервер можно было перезапустить, не потеряв его состояние?

Нужно ли настраивать сервер для использования персистентности?

Или нам просто нужно адаптировать запрос и использовать таблицу событий?

Вот пример нашего запроса:

from every data= DataInStream[state == 1] -> 
    every event = EventInStream[event.no == data.no] within 24h 
     insert into duplicatesOutStream data.id as id 

ответ

4

Вы можете сделать СЕР сохраняться это состояние, позволяя снимки. Документация может быть found here. Но имейте в виду, что это будет сохраняться «все состояние» КЭП «периодически» (настраивается в минутах). Поскольку это выполняется только периодически, вы можете потерять последние несколько событий, которые были получены после последней операции моментального снимка. Если вы хотите, чтобы cep восстановился после сбоя, это самый простой вариант.

Помимо этого, нет другого способа сделать постоянное заданное окно. Но если вы хотите, вы можете написать свое собственное окно времени (documentation), которое сделает упорство и подключит его к CEP.

Вместо этого вы также можете использовать таблицы событий. Когда вы используете таблицы событий, вы можете следить за тем, чтобы все прибывшие события сохранялись. (но одним из недостатков этого подхода является то, что это может быть хитом производительности по сравнению с подходом к окнам + снимкам).

+0

Я смог активировать кассандру и, таким образом, сохранить состояние ковша. Проблема, с которой мы сталкиваемся сейчас, заключается в том, что когда сервер закрывается с помощью cntrl-c или когда он завернут с yajsw, крючки отключения выполняются параллельно, а cassandra закрывается до того, как состояние сохраняется. Есть ли способ вызвать shutdownGracefully из некоторого статического метода или через порт выключения (аналогично tomcat)? – ron

+0

Существует два способа изящного выключения сервера wso2carbon: 1. с терминала - открыть другой терминал, переключиться на /bin и запустить команду ./wso2server.sh -stop 2. вы также можете отключиться из Интернета ui (консоль управления) –

+0

спасибо. для чистого закрытия wso2-сервера я добавил следующее в yajsw wrapper.conf: 'wrapper.app.shutdown.script = $ {wrapper_home}/scripts/wso2_shutdown.gv' скрипт groovy вызывается, когда wso2 получает команду остановки из yajsw. скрипт вызывает shutdownGracefully на сервере mbean: 'import javax.management. * servers = MBeanServerFactory.findMBeanServer (null) beanName =" org.wso2.carbon: type = ServerAdmin " servers.each() {try {new GroovyMBean (it, beanName) .shutdownGracefully()} catch (Exception ex) {println ex}} ' – ron