2016-11-10 2 views
0

Одна из транзакционных систем, с которыми я работаю по сделкам с сбор данных из нескольких внешних систем и принятие некоторых бизнес-решений на основе (транзакционной сущности + собранных данных).DROOLS Rule Engine: Выполнение сетевых вызовов внутри Drools

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

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

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

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

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

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

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

+0

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

+0

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

ответ

0

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

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.

 Смежные вопросы

  • Нет связанных вопросов^_^