События Drools Fusion Out of Order

Я использую Drools Fusion для обработки событий в реальном времени. Каждое событие имеет поле метки времени. Проблема в том, что иногда события могут идти не по порядку. Может ли drools fusion справиться с этой ситуацией, и если да, то как?

Спасибо


person user1846749    schedule 19.09.2017    source источник


Ответы (1)


Если A проштамповано 0:00:00, а B проштамповано 0:01:00 и B прибывает, и у вас есть правило

rule "A before B"
when
    $b: B()
    not A( this before $b )
then ... end

он будет стрелять.

Вы можете использовать время вставки фактов в качестве метки времени.

Сохраните исходную метку времени как свойство. Возможно, вы захотите взглянуть на него, если возникнет «ситуация». Это зависит.

Дополнение Если у вас есть максимальная задержка dt, вы можете поместить все поступающие события в "карантин" на эту задержку. Прежде чем вставлять A, проверьте все остальные потоки (источники) на наличие события B, предшествующего A, и отреагируйте соответствующим образом. Все будет реагировать как минимум с задержкой на дт.

person laune    schedule 19.09.2017
comment
поэтому при вставке правила B сработает и не будет ждать A, так как A уже произошло и выходит из строя, поэтому можем ли мы указать любое время ожидания до тех пор, пока оно не будет ожидать отложенных событий или около того? Иначе это будет проблема - person user1846749; 19.09.2017
comment
Я добавил еще одно предложение. Это то, что вам придется реализовать. - person laune; 19.09.2017
comment
поэтому я должен поддерживать собственный репозиторий, в котором я храню события в течение времени dt, а затем вставляю в сеанс kie. Это вы предлагаете? - person user1846749; 19.09.2017
comment
Также есть ли у вас идея/пример кода для сериализации данных сеанса пользователя из kiession? Возможно ли это сделать? - person user1846749; 19.09.2017
comment
Я бы не назвал это репозиторием, но да. Что еще? - Сериализация - это другая тема, но: просто получите все (метод API!) и сериализуйте. - person laune; 19.09.2017
comment
get it all означает, что весь сеанс будет сериализован или может быть сериализован только один факт. - person user1846749; 19.09.2017
comment
Если вы хотите сериализовать данные, это зависит от вас: вы можете получить факты/объекты из рабочей памяти и сериализовать их. - person laune; 19.09.2017