日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

強烈推薦強大的規則引擎框架LiteFlow

來源: 責編: 時間:2024-02-29 14:43:50 210觀看
導讀環境:SpringBoot2.7.161. 簡介LiteFlow是一個非常強大的現代化的規則引擎框架,融合了編排特性和規則引擎的所有特性。在每個公司的系統中,總有一些擁有復雜業務邏輯的系統,這些系統承載著核心業務邏輯,幾乎每個需求都和這

環境:SpringBoot2.7.16JT028資訊網——每日最新資訊28at.com


1. 簡介

LiteFlow是一個非常強大的現代化的規則引擎框架,融合了編排特性和規則引擎的所有特性。JT028資訊網——每日最新資訊28at.com

在每個公司的系統中,總有一些擁有復雜業務邏輯的系統,這些系統承載著核心業務邏輯,幾乎每個需求都和這些核心業務有關,這些核心業務業務邏輯冗長,涉及內部邏輯運算,緩存操作,持久化操作,外部資源調取,內部其他系統RPC調用等等。時間一長,項目幾經易手,維護成本就會越來越高。各種硬代碼判斷,分支條件越來越多。代碼的抽象,復用率也越來越低,各個模塊之間的耦合度很高。一小段邏輯的變動,會影響到其他模塊,需要進行完整回歸測試來驗證。如要靈活改變業務流程的順序,則要進行代碼大改動進行抽象,重新寫方法。實時熱變更業務流程,幾乎很難實現。LiteFlow為解耦邏輯而生,為編排而生,在使用LiteFlow之后,你會發現打造一個低耦合,靈活的系統會變得易如反掌!JT028資訊網——每日最新資訊28at.com

LiteFlow優勢

利用LiteFlow,你可以將瀑布流式的代碼,轉變成以組件為核心概念的代碼結構,這種結構的好處是可以任意編排,組件與組件之間是解耦的,組件可以用腳本來定義,組件之間的流轉全靠規則來驅動。LiteFlow擁有開源規則引擎最為簡單的DSL語法。十分鐘就可上手。JT028資訊網——每日最新資訊28at.com

圖片圖片JT028資訊網——每日最新資訊28at.com

組件可實時熱更替,也可以給編排好的邏輯流里實時增加一個組件,從而改變你的業務邏輯。JT028資訊網——每日最新資訊28at.com

圖片圖片JT028資訊網——每日最新資訊28at.com

LiteFlow的腳本組件,支持眾多腳本語言,完全和Java打通,你可以用腳本來實現任何邏輯。JT028資訊網——每日最新資訊28at.com

圖片圖片JT028資訊網——每日最新資訊28at.com

LiteFlow支持把編排規則和腳本放在數據庫,注冊中心中,還有可以任意擴展的接口,方便你定制。JT028資訊網——每日最新資訊28at.com

圖片圖片JT028資訊網——每日最新資訊28at.com

LiteFlow支持你能夠想象處理的任何邏輯流程,如下流程:JT028資訊網——每日最新資訊28at.com

圖片圖片JT028資訊網——每日最新資訊28at.com

圖片圖片JT028資訊網——每日最新資訊28at.com

規則文件

LiteFlow支持3中格式的規則文件定義:XML,JSON,YML。以下是XML示例:JT028資訊網——每日最新資訊28at.com

<?xml versinotallow="1.0" encoding="UTF-8"?><flow>    <chain name="example_01">        THEN(a, b, c)    </chain></flow>

規則說明

THNE:串行執行,a執行===》執行b===》執行cJT028資訊網——每日最新資訊28at.com

WHEN:并行執行JT028資訊網——每日最新資訊28at.com

<chain name="chain1">    WHEN(a, b, c);</chain>

SWITCH:選擇執行JT028資訊網——每日最新資訊28at.com

<chain name="chain1">    SWITCH(a).to(b, c, d);</chain>

圖片圖片JT028資訊網——每日最新資訊28at.com

IF:條件執行JT028資訊網——每日最新資訊28at.com

IF二元JT028資訊網——每日最新資訊28at.com

<chain name="chain1">    THEN(        IF(x, a),        b    );</chain>

圖片圖片JT028資訊網——每日最新資訊28at.com

其中x為條件節點,為真的情況下,執行鏈路就為x->a->b,為假鏈路就為x->b。JT028資訊網——每日最新資訊28at.com

IF三元JT028資訊網——每日最新資訊28at.com

<chain name="chain1">    THEN(        IF(x, a, b),        c    );</chain>

圖片圖片JT028資訊網——每日最新資訊28at.com

還有其它很多的規則,這里不一一舉例,可以查看官網。JT028資訊網——每日最新資訊28at.com

2. 實戰案例

環境配置JT028資訊網——每日最新資訊28at.com

<dependency>  <groupId>com.yomahub</groupId>  <artifactId>liteflow-spring-boot-starter</artifactId>  <version>2.11.4.2</version></dependency>

配置文件JT028資訊網——每日最新資訊28at.com

#liteflow 配置liteflow:  rule-source: flows/*.el.xml


JT028資訊網——每日最新資訊28at.com

整個規則流程執行如下JT028資訊網——每日最新資訊28at.com

圖片圖片JT028資訊網——每日最新資訊28at.com


JT028資訊網——每日最新資訊28at.com

規則定義JT028資訊網——每日最新資訊28at.com

<?xml versinotallow="1.0" encoding="UTF-8"?><flow>    <chain name="processOrder">        THEN(          initOrder,           IF(amount, discountOrder),          SWITCH(userType).to(vipDiscountOrder, normalDiscountOrder),          completeOrder        )    </chain></flow>

這里的initOrder,amount,discountOrder等都是具體Node接口是bean的名稱。JT028資訊網——每日最新資訊28at.com

初始化訂單組件

@Component("initOrder")public class InitOrderComponent extends NodeComponent {  @Override  public void process() {    System.out.println("初始化訂單...") ;    Order order = this.getContextBean(Order.class) ;    double sum = order.getItems().stream().mapToDouble(item -> {      return item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity())).doubleValue() ;    }).sum() ;    order.setTotalAmount(BigDecimal.valueOf(sum));  }}

這里只做了計算訂單總額。JT028資訊網——每日最新資訊28at.com

判斷訂單總額節點
JT028資訊網——每日最新資訊28at.com

@Component("amount")public class AmountComponent extends NodeIfComponent {  @Override  public boolean processIf() throws Exception {    System.out.println("判斷總金額,超過100元打折") ;    Order order = this.getContextBean(Order.class) ;    return order.getTotalAmount().doubleValue() >= 100D ;  }}

用戶類型判斷,執行哪個節點JT028資訊網——每日最新資訊28at.com

@Component("userType")public class UserTypeComponent extends NodeSwitchComponent {  @Override  public String processSwitch() throws Exception {    User user = this.getContextBean(User.class) ;    if (user.isVip()) {      return "vipDiscountOrder" ;    }    return "normalDiscountOrder" ;  }}

上面返回的是具體節點的beanName。JT028資訊網——每日最新資訊28at.com

VIP折扣節點
JT028資訊網——每日最新資訊28at.com

@Component("vipDiscountOrder")public class VIPDiscountOrderComponent extends NodeComponent {  @Override  public void process() {    System.out.println("VIP會員打9折") ;    Order order = this.getContextBean(Order.class) ;    order.setTotalAmount(order.getTotalAmount().multiply(BigDecimal.valueOf(9)).divide(BigDecimal.valueOf(10), RoundingMode.HALF_UP)) ;  }}

普通會員折扣節點JT028資訊網——每日最新資訊28at.com

@Component("normalDiscountOrder")public class NormalDiscountOrderComponent extends NodeComponent {  @Override  public void process() {    System.out.println("普通會員不打折") ;  }}

完成節點JT028資訊網——每日最新資訊28at.com

@Component("completeOrder")public class CompleteOrderComponent extends NodeComponent  {  @Override  public void process() throws Exception {    System.out.println("訂單折扣執行完成,最后收尾...") ;  }}

以上是該規則流程的所有配置及定義。接下來進行測試JT028資訊網——每日最新資訊28at.com

// 直接注入該類進行規則流程的啟動執行@Resourceprivate FlowExecutor flowExecutor;@Testpublic void testExample02() {  Order order = new Order() ;  order.setId(1L) ;  order.setSno("S001") ;  List<OrderItem> items = new ArrayList<>() ;  items.add(new OrderItem(1L, 2, BigDecimal.valueOf(22))) ;  items.add(new OrderItem(2L, 1, BigDecimal.valueOf(24.5))) ;  items.add(new OrderItem(3L, 5, BigDecimal.valueOf(66.3))) ;  order.setItems(items) ;  User user = new User() ;  user.setId(1L) ;  user.setVip(false) ;  LiteflowResponse response = flowExecutor.execute2Resp("processOrder", null, order, user);  if (!response.isSuccess()) {    Exception e = response.getCause() ;    e.printStackTrace() ;  } else {    System.out.println("流程成功執行...") ;    System.out.println("最終應付款:" + response.getContextBean(Order.class).getTotalAmount().doubleValue()) ;  }}

控制臺將會輸出詳細的信息。JT028資訊網——每日最新資訊28at.com

圖片圖片JT028資訊網——每日最新資訊28at.com

修改用戶類型后執行JT028資訊網——每日最新資訊28at.com

圖片圖片JT028資訊網——每日最新資訊28at.com

以上是本篇文章的全部內容,希望對你有所幫助。JT028資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-75360-0.html強烈推薦強大的規則引擎框架LiteFlow

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Vue3問題:如何實現拼圖驗證+郵箱登錄功能?前后端!

下一篇: 掌握 Python 棧,輕松實現進制轉換

標簽:
  • 熱門焦點
  • K60 Pro官方停產 第三方瞬間漲價

    雖然沒有官方宣布,但Redmi的一些高管也已經透露了,Redmi K60 Pro已經停產且不會補貨,這一切都是為了即將到來的K60 Ultra鋪路,屬于廠家的正常操作。但有意思的是該機在停產之后
  • 中興AX5400Pro+上手體驗:再升級 雙2.5G網口+USB 3.0這次全都有

    2021年11月的時候,中興先后發布了兩款路由器產品,中興AX5400和中興AX5400 Pro,從產品命名上就不難看出這是隸屬于同一系列的,但在外觀設計上這兩款產品可以說是完全沒一點關系
  • Raft算法:保障分布式系統共識的穩健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可復制、可冗余、可容錯”)的首字母縮寫。Raft算法是一種用于在分布式系統
  • 把LangChain跑起來的三個方法

    使用LangChain開發LLM應用時,需要機器進行GLM部署,好多同學第一步就被勸退了,那么如何繞過這個步驟先學習LLM模型的應用,對Langchain進行快速上手?本片講解3個把LangChain跑起來
  • 零售大模型“干中學”,攀爬數字化珠峰

    文/侯煜編輯/cc來源/華爾街科技眼對于絕大多數登山愛好者而言,攀爬珠穆朗瑪峰可謂終極目標。攀登珠峰的商業路線有兩條,一是尼泊爾境內的南坡路線,一是中國境內的北坡路線。相
  • “又被陳思誠騙了”

    作者|張思齊 出品|眾面(ID:ZhongMian_ZM)如今的國產懸疑電影,成了陳思誠的天下。最近大爆電影《消失的她》票房突破30億斷層奪魁暑期檔,陳思誠再度風頭無兩。你可以說陳思誠的
  • iQOO Neo8系列新品發布會

    旗艦雙芯 更強更Pro
  • 微軟發布Windows 11新版 引入全新任務欄狀態

    近日,微軟發布了Windows 11新版,而Build 22563更新主要引入了幾周前曝光的平板模式任務欄等,系統更流暢了。更新中,Windows 11加入了專門針對平板優化的任務欄
  • 華為舉行春季智慧辦公新品發布會 首次推出電子墨水屏平板

    北京時間2月27日晚,華為在巴塞羅那舉行春季智慧辦公新品發布會,在海外市場推出之前已經在中國市場上市的筆記本、平板、激光打印機等辦公產品,并首次推出搭載
Top 主站蜘蛛池模板: 特克斯县| 大连市| 永善县| 新源县| 泊头市| 灵寿县| 朔州市| 镇远县| 兴安盟| 苍溪县| 四子王旗| 汉寿县| 泾源县| 寿阳县| 正镶白旗| 建水县| 佛坪县| 灵武市| 开鲁县| 饶平县| 沅江市| 星子县| 宜昌市| 文登市| 罗源县| 遂昌县| 陈巴尔虎旗| 杨浦区| 四子王旗| 蓝田县| 赤城县| 奇台县| 灵川县| 新乐市| 剑阁县| 崇文区| 宜城市| 陇川县| 观塘区| 陈巴尔虎旗| 梁山县|