2016-11-10 121 views
0

我工作的一個事務系統處理來自多個外部系統的數據收集,並根據(事務實體+收集的數據)做出一些業務決策。DROOLS規則引擎:在Drools內部進行網絡呼叫

目前,我們遵循以下步驟:從多個子系統

  1. 收集數據。

  2. 使用(收集的數據+事務實體)作爲流口水的輸入,並從中推導出業務決策。

一個上述辦法的主要缺點是,我有事先收集所有數據(昂貴的網絡電話),甚至沒有理會該數據的有效性。

我想要做的是通過將服務調用移動到規則執行層來延遲服務調用。 其意圖是利用流水決策樹來避免進行服務調用,如果我可以對一些已經可用的數據(在我的事務性實體本身內)做出決定。

只是想讓思考過程得到驗證(即將服務調用作爲規則執行的一部分將是一種好的做法或不是)。

任何人都可以請同樣分享利弊。任何線索將不勝感激

+0

看來你已經確定了主要問題:網絡電話。如果通過避免某些調用而獲得的時間增益值得創造該邏輯的額外工作:那就是了。你對你提供的輸入有什麼期望? – laune

+0

我不想在我的代碼本身內創建這種邏輯(這同樣有點像黑客)。相反,想知道是否drools本身是正確的地方照顧相同的邏輯(通過決策樹)。只是想讓思考過程得到驗證(即作爲規則執行的一部分進行服務調用將是一種好的做法或不做)。 – 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中的任何內容。