Механизм правил DROOLS: совершение сетевых вызовов в Drools

Одна из транзакционных систем, над которой я работаю, связана с сбором данных из нескольких внешних систем и принятием некоторых бизнес-решений на основе (транзакционный объект + собранные данные).

В настоящее время мы выполняем следующие шаги:

  1. Сбор данных из нескольких подсистем.

  2. Использование (собранных данных + транзакционной сущности) в качестве входных данных для слюни и получение на их основе бизнес-решения.

Одним из основных недостатков описанного выше подхода является то, что я должен собирать все данные заранее (дорогие сетевые вызовы), даже не беспокоясь о полезности данных.

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

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

Может ли кто-нибудь поделиться плюсами и минусами вокруг того же. Любые выводы будут оценены


person Harshit    schedule 10.11.2016    source источник
comment
Кажется, вы определились с главной проблемой: сетевыми звонками. Если выигрыш во времени за счет исключения определенных вызовов стоит дополнительной работы по созданию этой логики: тогда все. Что еще вы ожидаете от того, что вы предоставили?   -  person laune    schedule 10.11.2016
comment
я не хочу создавать эту логику в самом моем коде (то же самое кажется хаком). Вместо этого мне было интересно, является ли само слюни подходящим местом, чтобы позаботиться о той же логике (через дерево решений). Просто хочу проверить мыслительный процесс (т. Е. Будет ли вызов службы как часть выполнения правил хорошей практикой или нет.)   -  person Harshit    schedule 10.11.2016


Ответы (1)


Вы не можете аргументировать фактами, которых у вас нет (пока). Если имеющиеся у вас факты позволяют решить, что еще вам нужно, вы можете написать правила в соответствии со следующим тривиальным примером.

rule "x and y, not z"
when
    Dimension( $id: id, coord == "x" )
    Dimension( id == $id, coord == "y" )
    not Dimension( id == $id, coord == "z" )
then
    fetch and insert missing Dimension
end

rule "x, y and z" ... end

Обратите внимание, что этот процесс выборки и вставки не должен выполняться синхронно. Вы можете вставить запрос как очередь событий — используйте что-нибудь из Java.

person laune    schedule 10.11.2016