規則引擎深度對比,LiteFlow vs Drools!( 二 )


規則引擎深度對比,LiteFlow vs Drools!

文章插圖
上述LiteFlow的編排表達式中,所表達的是下面一個邏輯流:
規則引擎深度對比,LiteFlow vs Drools!

文章插圖
LiteFlow編排表達式支持THEN(同步),WHEN(異步),SWITCH(選擇),IF(條件),FOR(次數循環),WHILE(條件循環)等大表達式,每個表達式又有許多擴展關鍵字可供選用 。
腳本組件支持的Groovy基本和java語法差不多,Groovy語言支持的一切你均可使用 。甚至可以在Groovy語法中額外定義類和方法 。
結論
總的來說,兩款框架都能用腳本來定義邏輯片段,在定義邏輯片段層面,Drools使用的是自研語法,LiteFlow使用的是插件式的Groovy,其實個人覺得Groovy更接近java語法,你甚至于可以在其中定義類和方法 。Drools在高級應用中,也可以用規則定義方法,但是我覺得并不那么自然 。
LiteFlow最大的特點是除了定義邏輯片段外,還可以進行全局組件的編排 。而這正是LiteFlow稱之為編排式規則引擎的由來 。使用簡單的編排語法可以設計出復雜的邏輯流 。支持java和腳本混編 。
和Java的數據交換在Drools的規則中 , 你可以通過import關鍵字來引入java的一些類包類進行調用 。
【規則引擎深度對比,LiteFlow vs Drools!】在LiteFlow的腳本組件中 , Groovy也可以通過import 來引入java的任何包來調用 。
Drools中 , 可以直接引用到fact對象 。
LiteFlow中,可以直接引用到context對象,context上下文貫穿整個編排鏈路 。
LiteFlow中,通過@ScriptBean注解,你甚至可以把spring上下文中的bean引入進來直接調用 。利用這個特性,甚至于可以在腳本中調用rpc , 調用數據庫dao對象取數據 。這個在Drools里面雖然也可以做到 , 但是要麻煩的多 。
結論
基本都能滿足和java的數據交換需求 , 但是LiteFlow在場景上支持的顯然更加多一點 。
API以及集成在API調用層面 , Drools需要去定義KieContainer , KBase,KSession一系列對象 。LiteFlow框架只需要使用到LiteFlowExecutor對象 。
Drools支持了編程式接入,但是在springboot中需要自己寫很多配置類來去集成 。
LiteFlow不僅支持了編程式接入,在springboot環境下更是提供了自動裝配的starer接入方式,連定義LiteFlowExecutor都不需要,直接從上下文中就可以拿到自動裝配后的對象進行調用 。
結論
LiteFlow api更加簡單,同Springboot集成度更加高 。
侵入性耦合比較Drools需要在java代碼里需要用到規則的地方用KSession對象去匹配規則進行調用 。規則和java是分離的 。在調用層面耦合了KSession調用對象 。
LiteFlow的規則和java也是分離的,但是LiteFlow多了組件這一概念,所以在組件層面是需要繼承的,但是同時也提供聲明式組件的選擇,使用聲明式的方式耦合相對要減少一些 。在調用層面也需要去調用LiteFlowExecutor對象 。
結論
在耦合度上面,由于LiteFlow提供編排特性,API耦合度相對稍高一些 。Drools耦合少一些 。
規則的學習成本Drools的規則學習成本挺高的 。由于是自研的規則語法,需要一個很全面的熟悉過程 。而且文檔全英文 。
LiteFlow的編排規則極其簡單,如果你不使用腳本組件的話,基本上10分鐘即可上手 。就算使用了groovy腳本,由于groovy非常類似于java,學習成本也非常少 。況且有大量的學習資料可以參閱 。
LiteFlow的文檔中英文齊全 , 還有良好的中文社區可以答疑解惑 。
結論
在規則學習成本上,Drools的規則學習曲線比LiteFlow高出不止一丁點 。
是否有語言插件Drools在Eclipse和IDEA上均有插件來做語法的高亮,預檢查和提示 。
LiteFlow在IDEA上有插件來做高亮,預檢查和提示 。Eclipse上沒有 。
結論
考慮到使用eclipse的人幾乎很少了 , 基本上2款規則引擎在語言插件上都做到了 。
規則的存儲Drools的規則理論上支持你的規則存于任何地方,但這一切都需要你手動去額外完成 。自己去存,自己去取 。
Drools還有款workbeanch的插件,可以將規則存于workbeanch中 。只有這個是不需要自己存取的 。
LiteFlow除了本地規則以外,原生支持將規則存儲于任何標準SQL的數據庫,還原生支持了Nacos,Etcd,zookeeper等注冊中心 。只需要配置一下即可 。除此之外,還提供了擴展接口,方便你自己擴展成任意的存儲點 。
結論
LiteFlow的規則存儲支持比Drools豐富的多 。

推薦閱讀