Как я могу иметь несколько контекстов обрабатывать события в Apama - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь определить монитор, в котором я получаю события, а затем обрабатывать их в нескольких контекстах (грубо приравнивая к потокам, если я правильно понимаю), я знаю, что могу написать

spawn myAction() to myNewContext; 

, и это будет выполнятьсяэто действие в новом контексте.

Однако я хочу иметь действие, которое будет реагировать на событие, когда оно попадает в мой монитор:

on all trigger() as t {
  doMyThing()
}

on all otherTrigger() as ot {
  doMyOtherThing()
}

Могу ли я определить on all таким образом, чтобы использовать определенный контекст?Что-то вроде

on all trigger() as t in myContext {
  doMyThing()
}

on all otherTrigger() as t in myOtherContext {
  doMyOtherThing()
}

Если нет, то каков наилучший способ определить это в Apama EPL?Кроме того, могу ли я иметь несколько контекстов, обрабатывающих одни и те же события, когда они появляются, в круговом стиле?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Чтобы немного расширить ответ Мэддена (у меня еще недостаточно представителей, чтобы комментировать), частный контекст и пересылки также являются единственным способом достижения настоящего циклического перебора: в противном случае все контексты получат все события. самый простой подход заключается в использовании стратегии разделения (например, идентификаторы, заканчивающиеся на 0, переходят к контексту-0, или у вас есть один контекст на машину, которую вы отслеживаете, и т. Д.), Потому что тогда каждая проблема отслеживается водин и тот же контекст, и вам не нужно совместно использовать состояние.

Также я мог бы иметь несколько контекстов, обрабатывающих одни и те же события, когда они приходят, в стиле круговой проверки?

Этоне совсем понятно для меняКакую выгоду вы стремитесь здесь?Если вы хотите уменьшить задержку, используя «следующий доступный» контекст, выбирающий событие, вероятно, это неправильный способ его достижения - решение о том, какой контекст обрабатывает событие, означает, что вам потребуется межконтекстная связь икоординация, которая увеличит время ожидания.Если вы хотите, чтобы несколько контекстов обрабатывали одни и те же события (например, один контекст запускает ваше правило скачка температуры, а другой запускает ваше правило долгосрочного среднего значения температуры, но оба принимают показания температуры в качестве входных данных), то это хороший подход, но это не то, что яЯ бы позвонил в круговой.

0 голосов
/ 28 сентября 2018

События Apama от внешних получателей (то есть внешнего мира) доставляются только в public контексты, включая «основной» контекст.Таким образом, в зависимости от вашей архитектуры, вы можете либо порождать свое действие в общедоступном контексте

// set the receivesInput parameter to true to make this context public
spawn myAction() to context("myContext", true);

...

action myAction() {
    on all trigger() as t {
        doMyThing();
    }
}

, либо порождать свое действие в частном контексте и настроить перенаправитель событий в общедоступном контексте, обычно в основном контексте (который всегда будет существовать)

spawn myAction() to context("myNewContext");
on all trigger() as t {
    send t to "myChannel"; // forward all trigger events to the "myChannel" channel
}

...

action myAction() {
    monitor.subscribe("myChannel"); // receive all events delivered to the "myChannel" channel
    on all trigger() as t {
        doMyThing();
    }
}

Нерест в частном контексте и использование системы каналов, как правило, является лучшим дизайном, поскольку он только отправляет события в контексты, которые заботятся о них

...