成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring Boot3集成 LiteFlow 實現業務流程編排

開發 前端
LiteFlow 是一個強大的流程編排框架,它可以幫助開發者簡化復雜的業務邏輯處理。通過定義節點和流程,LiteFlow 使得代碼更加模塊化和易于管理。無論是簡單的任務調度還是復雜的業務流程自動化,LiteFlow 都能提供有效的解決方案。

LiteFlow 是一個國產的輕量級的 Java 流程編排框架,旨在簡化復雜的業務邏輯處理流程。它通過定義節點和流程,將復雜的業務邏輯分解成多個可管理的部分,從而提高代碼的可讀性和可維護性。

今天松哥和大伙一起來聊下這個工具。

一 什么是 LiteFlow

LiteFlow 是一個基于 Java 的流程編排框架,它允許開發者定義一系列的節點(Node)和流程(Flow),通過這些節點和流程來控制業務邏輯的執行順序。LiteFlow 的核心思想是將復雜的業務邏輯分解成多個小的、可管理的部分,每個部分負責處理特定的任務。

二 為什么需要 LiteFlow

如果你要對復雜業務邏輯進行新寫或者重構,用LiteFlow最合適不過。它是一個編排式的規則引擎框架,組件編排,幫助解耦業務代碼,讓每一個業務片段都是一個組件。

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

圖片圖片

而且這些組件可以實時熱更替,也可以給編排好的邏輯流里實時增加一個組件,從而改變你的業務邏輯。

圖片圖片

2.1 LiteFlow 適用場景

LiteFlow 適用于擁有復雜邏輯的業務,比如說價格引擎,下單流程等,這些業務往往都擁有很多步驟,這些步驟完全可以按照業務粒度拆分成一個個獨立的組件,進行裝配復用變更。使用 LiteFlow,你會得到一個靈活度高,擴展性很強的系統。因為組件之間相互獨立,也可以避免改一處而動全身的這樣的風險。

2.2 LiteFlow 不適用場景

LiteFlow 只做基于邏輯的流轉,而不做基于角色任務的流轉。

三 LiteFlow 實踐

假設我現在有一個用戶下單的需求,下單步驟我簡化成以下幾個步驟:

  1. 身份驗證:驗證用戶的身份信息,確保操作的安全性。
  2. 庫存檢查:檢查商品是否有足夠的庫存來滿足訂單需求。
  3. 價格確認:再次確認商品的價格,防止因促銷活動結束等原因導致的價格變動。
  4. 創建訂單:如果所有條件都滿足,服務器會在數據庫中創建一條新的訂單記錄。
  5. 支付處理:根據用戶選擇的支付方式進行相應的處理,比如跳轉到第三方支付平臺完成支付。
  6. 庫存更新:一旦支付成功,更新商品的庫存信息,減少已售出的商品數量。
  7. 訂單確認:向用戶發送訂單確認信息,包括訂單號、預計發貨時間等。

其中 1、5 屬于用戶節點要完成的內容;2、6 屬于庫存節點要完成的內容;3 屬于商品節點要完成的內容;4、7 則屬于訂單節點要完成的內容。

接下來我就通過 LiteFlow 來和小伙伴們演示如何完成上面的下單過程。

簡單期間,我這里就和大家演示前 4 步的流程編排。

3.1 基本用法

首先創建 SpringBoot 工程,引入 LiteFlow 依賴,如下:

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

接下來我們根據前面分析的業務邏輯,創建四個不同的業務節點:

@Component
public class UserNode extends NodeComponent {
    @Override
    public void process() {
        System.out.println("用戶身份驗證");
    }
}
@Component
public class StorageNode extends NodeComponent {
    @Override
    public void process() {
        System.out.println("庫存檢查");
    }
}
@Component
public class MerchandiseNode extends NodeComponent {
    @Override
    public void process() {
        System.out.println("價格確認");
    }
}
@Component
public class OrderNode extends NodeComponent {
    @Override
    public void process() {
        System.out.println("訂單確認");
    }
}

然后在 classpath 下定義 liteflow.xml 文件對這些流程進行編排:

<?xml versinotallow="1.0" encoding="UTF-8"?>
<flow>
    <chain name="orderProcessChain">
        THEN(userNode, storageNode, merchandiseNode, orderNode);
    </chain>
</flow>

接下來在 application.properties 中加載這個 xml 文件,如下:

liteflow.rule-source=classpath:liteflow.xml

接下來就可以使用這個流程了,如下:

/**
 * @author:江南一點雨
 * @site:http://www.javaboy.org
 * @微信公眾號:江南一點雨
 * @github:https://github.com/lenve
 * @gitee:https://gitee.com/lenve
 */
@RestController
public class HelloController {

    @Autowired
    FlowExecutor flowExecutor;
    @GetMapping("/hello")
    public void hello() {
        flowExecutor.execute2Resp("orderProcessChain");
    }
}

當我們調用 /hello 接口的時候,就會依次出發前面編排的四個服務。

3.2 條件選擇

我們可以定義一個條件選擇組件,類似下面這樣:

@LiteflowComponent("a")
public class ACmp extends NodeSwitchComponent {

    @Override
    public String processSwitch() throws Exception {
        System.out.println("Acomp executed!");
        return "c";
    }
}

這個方法需要返回 String 類型,就是具體的結果,上面代碼示例了選擇到了 c 節點。

這個時候我們定義 xml 內容如下:

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

這就表示先在 a 中做選擇,根據 a 中 processSwitch 方法的返回值,決定去執行 b 還是 c。

3.3 循環

LiteFlow 提供了次數循環組件。返回的是一個 int 值的循環次數。主要用于 FOR...DO... 表達式。

循環組件的定義類似下面這樣:

@LiteflowComponent("f")
public class FCmp extends NodeForComponent {
    @Override
    public int processFor() throws Exception {
        //這里根據業務去返回for的結果
    }
}

循環多少次,就看方法的返回值了。

然后定義 xml 文件類似下面這樣:

<chain name="chain1">
    FOR(f).DO(THEN(a, b));
</chain>

我覺得這塊可以改進下,沒必要定義類,直接在 XML 文件中用表達式去描述 FOR 會更好一些。

另外 LiteFlow 也支持迭代、boolean 等組件,也不難,感興趣的小伙伴可以去看下文檔。

四 小結

LiteFlow 是一個強大的流程編排框架,它可以幫助開發者簡化復雜的業務邏輯處理。通過定義節點和流程,LiteFlow 使得代碼更加模塊化和易于管理。無論是簡單的任務調度還是復雜的業務流程自動化,LiteFlow 都能提供有效的解決方案。

責任編輯:武曉燕 來源: 江南一點雨
相關推薦

2025-04-27 03:00:00

Spring流程業務

2025-05-13 04:15:00

2024-10-11 11:32:22

Spring6RSocket服務

2010-02-04 13:57:19

ibmdwWebsphere

2024-02-26 00:00:00

GolangRedisDocker

2010-03-03 14:51:43

2020-06-19 12:23:05

CIO數據分析技術

2024-07-05 11:47:43

2025-01-20 00:00:03

高并發秒殺業務

2011-05-18 11:34:54

云端業務流程管理

2010-06-29 15:45:57

UML業務流程

2013-11-06 14:15:11

流程

2020-01-19 20:07:32

物聯網大數據IOT

2021-05-06 17:22:22

區塊鏈加密貨幣技術

2023-01-04 13:41:23

RPA自動化機器人

2017-08-11 11:41:53

迭代BPM開發

2012-12-03 13:50:40

IBMdW

2023-10-17 13:35:00

數字化轉型供應商

2020-05-06 10:07:15

價值流圖VSM可視化圖形

2013-11-06 14:16:23

流程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本精品一区二区三区在线观看视频 | 一区二区三区免费在线观看 | 国产精品成av人在线视午夜片 | 91免费看片 | 国产日韩精品一区 | 91精品国产一区二区三区蜜臀 | 91一区二区三区在线观看 | 国产一区二区观看 | 久久精品91久久久久久再现 | 国产在线观看一区 | 一区二区三区国产视频 | 欧美一级大片 | 国产成人免费 | 欧美va大片 | 自拍第1页| 亚洲欧美激情精品一区二区 | 亚洲精品乱码久久久久久蜜桃91 | 草草视频在线观看 | 欧美日韩理论 | 久久久精品一区 | 亚洲一区精品在线 | 亚洲免费三级 | 成人h视频在线观看 | 久久精品色欧美aⅴ一区二区 | 久久久久国产精品午夜一区 | 91九色在线观看 | 国产在线精品一区二区 | 伊人一二三 | 在线播放一区二区三区 | 永久免费av | 国产免费拔擦拔擦8x高清 | 午夜av电影 | 一区在线免费视频 | 精品一区二区三区四区五区 | 国产一区二区在线视频 | www成年人视频 | 久久国产电影 | 麻豆久久精品 | 日韩伦理一区二区三区 | 97精品久久| 欧美日韩不卡 |